python3.8安装scrapy,参考可用 https://www.lfd.uci.edu/~gohlke/pythonlibs/
Scrapy基本项目流程为:
创建一个Scrapy项目
——>定义提取的Item
——>编写爬取网站的spider并提取Item
——>编写Item Pipeline来存储提取到的Item(即数据)
一般我们的爬虫流程为:
抓取索引页:请求索引页的URL并得到源代码,进行下一步分析;
——>获取内容和下一页链接:分析源代码,提取索引页数据,并且获取下一页链接,进行下一步抓取;
——>翻页爬取:请求下一页信息,分析内容并请求在下一页链接;
——>保存爬取结果:将爬取结果保存为特定格式和文本,或者保存数据库。
①创建项目:在开始爬取之前,您必须创建一个新的Scrapy项目。 进入您打算存储代码的目录中,运行下列命令(以知乎日报为例):
scrapy startproject zhihurb
②定义Item
这一步是定义我们需要获取到的数据信息,比如我们需要获得网站里的一些url,网站文章的内容,文章的作者等。这一步定义的地方就在我们的items.py文件。
③编写Spider
这一步就是写我们最熟悉的爬虫了,而我们的Scrapy框架可以让我们不需要去考虑实现的方法,只需要写出爬取的逻辑就可以了。
首先在scrapy项目下面创建新的爬虫spiders,我们需要在 spiders/ 文件夹下创建我们的爬虫文件,比如就叫spider.py。
scrapy genspider 文件名 要爬的域名
打开大框架就能看见刚刚新建的爬虫文件,初始内容就是刚刚我们给出的域名信息等,注意这里url是一个列表。
④运行爬虫
scrapy crawl 爬虫文件名
将爬到的结果保存在html里,运行后就可以看到生成了这个html文件,打开就是要爬的网页了。
⑤提取数据
接着就可以使用解析工具解析源码,拿到数据了,我用了XPath提取一些需要用的文本数据,直接输出成txt。
Q:503 service unavailable
A:到settings.py里加一个user-agent代理,在网页headers的request header,随便找一个就行。
用到的一些TIPS:
.xpath() 返回一个类 SelectorList 的实例,为了提取真实的原文数据,需要调用.extract()
.extract() 返回列表
.extract()[0] = [0].extract() 返回list中的第一个元素
[0].extract()[0] 返回列表中第一项的第一个字符
/text 返回文本内容
//text 获取本标签的文本以及它所有子标签的文本。
get() 将xpath提取到的数据从selector转换为unicode,返回字符串
getall() 将xpath提取到的数据从selector转换为unicode,返回的是一个列表
xpath('string(.)') 获取所有文本并且拼接
同时选择多个属性 c=response.xpath('//div[@class="info"][@data-key="1"]')
去除列表中换行符 a = ['\n','sth i need'] → b = [x.strip() for x in a if x.strip()!='']
去除列表中空字符串最快最简单的方法 result = list(filter(None, result)) 参考这里