目录
python爬虫框架scrapy
1、简介scrapy
快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化数据。
2、scrapy安装
打开cmd,输入
pip install scrapy
下载完成后,出现Successfully install scrapy字样即安装成功。
过程中或许会出现安装问题,仔细阅读提示信息,可能是由于python或pip版本问题,也有可能是因为环境变量的配置问题出错,对症下药即可。
安装完成后,进行测试,输入scrapy,得到其信息如下,则可以正常使用。
3、scrapy使用
创建
打开cmd,进入将要创建爬虫的地址,输入
scrapy startproject 项目名
cd 项目名
scrapy genspider 爬虫名 域名
完成后,用PyCharm打开项目后,可以看到创建后目录大致页如下(result文件夹是后面添加的,创建时没有该文件)
spiders下的baidu.py是scrapy自动为我们生成的,后面我们将使用该文件。
配置setting.py
打开setting.py文件
BOT_NAME:项目名
USER_AGENT:默认是注释的,这个东西非常重要,如果不写很容易被判断为电脑,简单写一个Mozilla/5.0即可
ROBOTSTXT_OBEY:是否遵循机器人协议,默认是true,需要改为false,否则很多东西爬不了
DOWNLOAD_DELAY:下载延迟时间,单位是秒,控制爬虫爬取的频率,根据你的项目调整,不要太快也不要太慢,默认是3秒,即爬一个停3秒,设置为1秒性价比较高,如果要爬取的文件较多,写零点几秒也行
试用与运行
到这里我们尝试用scrapy做一下爬取,打开spider.py下的baidu.py(取决于你scrapy genspider 爬虫名 域名时输入的爬虫名)
输入一下代码,我们抓取百度搜索“机器学习”的结果写入result.html文件中
import scrapy
class BaiduspiderSpider(scrapy.Spider):
# 爬虫名
name = 'baiduSpider' # 一定要存在
# 允许爬虫的范围
allowed_domains = ['www.baidu.com']
start_urls = ['http://www.baidu.com/s?wd=机器学习']
def parse(self, response):
# 抓取后写入result中
filename = "../result/result.html"
with open(filename, 'wb') as f:
f.write(response.body)
这样我们的抓取器就做好了,cmd进入baidu_search/baidu_search/目录,执行:
scrapy crawl baidu_search
也可以写一个如下的run文件,再执行(方便后面的使用,毕竟每次都用cmd,就很麻烦)
from scrapy import cmdline
cmdline.execute('scrapy crawl baiduSpider'.split())
注意!!此时如果setting文件尚未修改,则抓取不到数据。
语料提取
进行实操前说一下Xpath。
XML路径语言(XML Path Language),它是一种用来确定XML文档中位置的语言。Xpath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
“/”:绝对路径,从根节点开始
eg:/html/body/form/input ——查找html下的body下的form下的所有input节点
“//”:相对路径
eg://input ——查找所有input节点
“*”:通配符,选择未知节点
eg://form/* ——查找form节点下的所有节点
“@”:属性符
eg://input[@name] ——定位所有包含name属性的input节点
eg://input[@value=‘2’] ——定位所有value=2的i