网页视频抓取工具 知乎(一套Python爬虫框架的学习教程,需要可下方自提↓)

优采云 发布时间: 2022-01-04 17:14

  网页视频抓取工具 知乎(一套Python爬虫框架的学习教程,需要可下方自提↓)

  一般小爬虫需求可以直接使用requests库+bs4解决。如果比较麻烦,我会用selenium来解决js的异步加载问题。Python爬虫框架只在遇到比较大的需求时才会用到,主要是为了方便管理和扩展。

  以下是一些高效爬虫框架的集合。我个人认为 Scrapy 和 PySpider 更好用。这两个用的比较多。您可以根据自己的习惯和喜好使用它们。

  1、Scrapy

  它使用纯Python实现了一个为爬取网站数据和提取结构化数据而编写的应用框架。它具有广泛的用途。

  它可用于包括数据挖掘、信息处理或存储历史数据在内的一系列程序中,也可用于获取API(如Amazon Associates Web Services)或一般网络爬虫返回的数据。

  

  Scrapy 可以轻松进行网页抓取,并且可以根据您的需求轻松定制。

  安装

  pip install scrapy

  在开始爬取之前,必须创建一个新的 Scrapy 项目。需要注意的是,在创建项目时,会在当前目录下新建一个爬虫项目目录。

  scrapy startproject tutorial

ls

tutorial/

scrapy.cfg

tutorial/

__init__.py

items.py

pipelines.py

settings.py

spiders/

__init__.py

...

  文件描述:

  Scrapy 使用 Twisted 异步网络库来处理网络通信,可以加快下载速度,而无需自己实现异步框架。

  整体结构大致如下:

  

  Scrapy的运行过程大致如下:

  补充点:安装Scrapy时可能遇到的问题

  ① 导入错误:没有名为 w3lib.http 的模块

     解决:pip install w3lib

  ② 导入错误:没有名为扭曲的模块

   解决:pip install twisted

  ③ 导入错误:没有名为 lxml.HTML 的模块

   解决:pip install lxml

  ④ 错误:libxml/xmlversion.h: No such file or directory

   解决:apt-get install libxml2-dev libxslt-dev

    apt-get install Python-lxml

  ⑤ 导入错误:没有名为 cssselect 的模块

   解决:pip install cssselect

  ⑥ 导入错误:没有名为 OpenSSL 的模块

   解决:pip install pyOpenSSL

  或者直接的方法:使用anaconda安装;

  Scrapy 的框架使用非常频繁。在相关职位的招聘要求中,这是一个必须掌握的主流框架。Python新手小白在学习爬虫的时候可以重点练习一下这个框架的使用。

  下面还分享了一套Python爬虫学习教程,大家可以在下方提一下↓↓

  

  2、PySpider

  PySpider是由binux制作的爬虫架构的开源实现,强大的网络爬虫系统,自带强大的webUI,分布式架构,支持多数据库后端。

  框架特点:

  

  打开cmd,输入pyspider,然后打开浏览器输入::5000,就可以进入pyspider的后台了。

  

  第一次打开时背景是空白的。点击打开浏览器后,不要关闭cmd,点击创建,输入名字(当然不要随便取名字)。

  

  单击确定后,您将进入脚本编辑器;

  

  数据处理流程:

  每个组件都使用一个消息队列进行连接,除了调度器是单点,fetcher和处理器可以部署在多实例分布式部署中。scheduler 负责整体调度控制

  任务由调度器调度,fetcher抓取网页内容,处理器执行预先编写好的python脚本,输出结果或生成新的链式任务(发送给调度器),形成闭环。

  每个脚本可以灵活使用各种python库来解析页面,使用框架API控制下一次爬取动作,设置回调来控制解析动作。

  

  框架*敏*感*词*

  PySpider的基本使用:

  from libs.base_handler import *

class Handler(BaseHandler):

@every(minutes=24*60, seconds=0)

def on_start(self):

self.crawl('A Fast and Powerful Scraping and Web Crawling Framework', callback=self.index_page)

# @every:告诉调度器 on_start方法每天执行一次。

# on_start:作为爬虫入口代码,调用此函数,启动抓取。

@config(age=10*24*60*60)

def index_page(self, response):

for each in response.doc('a[href^="http://"]').items():

self.crawl(each.attr.href, callback=self.detail_page)

# @config:告诉调度器 request请求的过期时间是10天,10天内再遇到这个请求直接忽略。此参数亦可在self.crawl(url, age=10*24*60*60)中设置。

# index_page:获取一个Response对象,response.doc是pyquery对象的一个扩展方法。

def detail_page(self, response):

return {

"url": response.url,

"title": response.doc('title').text(),

}

# detail_page:返回一个结果集对象。这个结果默认会被添加到resultdb数据库(如果启动时没有指定数据库默认调用sqlite数据库)。

  Pyspider更容易上手,更容易操作,因为它增加了WEB界面,快速编写爬虫,集成phantomjs,可以用来抓取js渲染的页面。

  Scrapy 的定制化程度较高,低于 PySpider。适合学习研究,有很多相关知识可以学习。

  下面小编整理了一些我用过的Python爬虫学习资料。有需要的可以点击下方进入群找群管理获取↓↓↓【免费分享】

  

  3、波西亚

  它是一个开源的可视化爬虫工具,允许用户在没有任何编程知识的情况下爬取网站。只需对您感兴趣的页面进行注释,Portia 就会创建一个蜘蛛来从相似的页面中提取数据。

  需要注意的是:

  Portia只是一个可视化的编辑爬虫规则编辑器,最终的结果是一个scrapy爬虫项目。如果要部署和管理爬虫,还是需要学习scrapy相关知识。

  只有扁平的、单一结构的 网站 可以被爬取。对于更深的网站爬取级别,编写爬取规则难度更大。

  

  建议使用docker安装,Windows上的Docker部署比较麻烦,建议在Linux环境下部署Portia。

  docker pull starjason/portia

  跑

  docker run -i -t --rm -v :/app/data/projects:rw -p 9001:9001 scrapinghub/portia

  爬取数据的工作流程主要分为两步

  关注链接

  

  提取数据

  

  您可以在右侧看到当前页面上所有提取的数据;

  运行爬虫:

  1)Portia 提供了导出为 Scrapy 的功能。导出后就可以使用Scrapy来运行爬虫了。

  

  2)可以使用Portia的命令portiacrawl project_path spider_name -o output.json来运行。

  3) 点击Run on ScrapingHub,可以在网页上直观的查看结果并导出数据。

  

  部署Portia只能可视化创建scrapy爬虫,不能可视化部署运行在网页上。如果需要对网络爬虫进行可视化管理,有两种方法。

  4、美汤

  这个大家都很熟悉,集成了一些常见的爬虫需求。

  它是一个 Python 库,可以从 HTML 或 XML 文件中提取数据,并且可以使用您喜欢的转换器来实现自定义文档导航、查找和修改文档。

  

  Beautiful Soup的缺点是无法加载JS;

  

  Beautiful Soup 将复杂的 HTML 文档转换为复杂的树结构,其中每个节点都是一个 Python 对象。

  所有对象可以分为4类:

  (1)Tag:通俗的说就是HTML中的一个标签,和上面的div和p一样。每个Tag都有两个重要的属性name和attrs。name指的是标签的名称或者标签的名称attrs 通常是指标签的类。

  (2)NavigableString:获取标签内的文字,如soup.p.string。

  (3)BeautifulSoup:代表一个文档的全部内容。

  (4)Comment:Comment 对象是一种特殊类型的 NavigableString 对象,其输出不收录注释符号。

  代码示例:

  # -*- coding: UTF-8 -*-

from bs4 import BeautifulSoup

import requests

import time

url = "https://blog.csdn.net/"

# 创建一个列表,来装我们的a标签的所有内容

alists = []

html_str = requests.get(url)

#接下来就把我们获取到的html内容放到我们BeautifulSoup这个方法中,通这个方法得到一个对象,在这个对象里BeautifulSoup帮我们把整个html变成了各个节点,我们就可以利用框架快速查找到我们需要的标签。

soup = BeautifulSoup(html_str.text, 'html.parser')

#find_all 通过这个方法寻找a标签

all_a = soup.find_all('a')

#循环将a标签放到我们的列表里面

for item in all_a:

if item:

if len(item) > 2:

alists.append(item)

#循环输出列表,打印我们刚刚得到的数据

for a in alists:

#replace 这个方法是字符串处理的一种方法,我们去掉\n\t这样的话我们就可以看到不换行的结果了

print(str(a).replace("\n",""))

pass

print("当前时间: ",time.strftime('%Y.%m.%d %H:%M:%S ',time.localtime(time.time())))

  Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档为 utf-8 编码。不需要考虑编码方式,除非文档没有指定编码方式,此时Beautiful Soup无法自动识别编码方式。

  我经常使用这个。获取html元素的时候,都是bs4完成的。

  5、克劳利

  Crawley可以高速抓取网站对应的内容,支持关系型和非关系型数据库,数据可以导出为JSON、XML等。

  

  crawley 框架的主要特点:

  (1)简单易学,可以高速抓取网站对应的内容

  (2) 抓取到的内容可以方便的存入数据库,如:postgres、mysql、oracle、sqlite等数据库

  (3) 抓取到的数据可以导出为json、xml等格式

  (4)支持非关系型数据库,如mongodb、couchdb等。

  (5) 支持使用命令行工具

  (6)可以使用自己喜欢的工具提取数据,比如xpath或者pyquery等工具

  (7)支持使用cookie登录访问只有登录才能访问的网页

  创建项目

  ~$ crawley startproject [project_name]

~$ cd [project_name]

  定义模型

  """ models.py """

from crawley.persistance import Entity, UrlEntity, Field, Unicode

class Package(Entity):

#add your table fields here

updated = Field(Unicode(255))

package = Field(Unicode(255))

description = Field(Unicode(255))

  6、硒

  这是一个调用浏览器的驱动程序。通过这个库,你可以直接调用浏览器完成某些操作,比如输入验证码。

  Selenium 是一个自动化测试工具,支持各种浏览器,包括Chrome、Safari、Firefox 等主流界面浏览器。如果在这些浏览器中安装 Selenium 插件,就可以轻松测试 Web 界面。

  

  Selenium 支持浏览器驱动,PhantomJS 用于渲染和解析 JS,Selenium 用于驱动和 Python 接口,Python 进行后期处理。

  例子:

  from selenium import webdriver

from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()

browser.get('http://www.yahoo.com')

assert 'Yahoo' in browser.title

elem = browser.find_element_by_name('p') # Find the search box

elem.send_keys('seleniumhq' + Keys.RETURN)

browser.quit()

  7、巨蟒鹅

  Python-goose框架可以提取的信息包括:

  例子

  >>> from goose import Goose

>>> url = 'Occupy London loses eviction fight'

>>> g = Goose()

>>> article = g.extract(url=url)

>>> article.title

u'Occupy London loses eviction fight'

>>> article.meta_description

"Occupy London protesters who have been camped outside the landmark St. Paul's Cathedral for the past four months lost their court bid to avoid eviction Wednesday in a decision made by London's Court of Appeal."

>>> article.cleaned_text[:150]

(CNN) -- Occupy London protesters who have been camped outside the landmark St. Paul's Cathedral for the past four months lost their court bid to avoi

>>> article.top_image.src

http://i2.cdn.turner.com/cnn/dam/assets/111017024308-occupy-london-st-paul-s-cathedral-story-top.jpg

  8、抢

  是一个用于构建网络爬虫的 Python 框架;

  

  使用 Grab,您可以构建各种复杂的网络爬虫工具,从简单的 5 行脚本到处理数百万个网页的复杂异步 网站 爬虫工具。Grab 提供了一个 API 来执行网络请求和处理接收到的内容,例如与 HTML 文档的 DOM 树进行交互。

  上述框架的优缺点各不相同。使用的时候可以根据具体场景选择合适的框架。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线