网页视频抓取工具 知乎(一套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 树进行交互。
上述框架的优缺点各不相同。使用的时候可以根据具体场景选择合适的框架。