用scrapy爬小说

一、scrapy的安装与使用
1,打开cmd,命令行pip install scrapy,下载安装scrapy
2,创建scrapy项目:scrapy startproject Douluodalu创建一个Douluodalu的文件夹
3,创建一个spider:先cd Douluodalu 打开文件
再scrapy genspider Douluo(文件名)
即在Douluodalu的子文件夹内创建一个Douluo.py文件
打开Douluo.py
用scrapy爬小说
二、使用正则或xpath对response的内容提取
1,正则 import re
打开网站,查看网络源代码,会看在div标签下p标签中有每个章节名,在a标签内有每个章节的url链接
用scrapy爬小说
在def parse(self,response):下对页面返回的response进行解析
re.findall(pattern, string, flags=0)
pattern:正则表达式
string:需要处理的字符串
flags:说明匹配模式,
提取章节urls:在url原本的地方用(.*?)代替,因为提取到的url不是url的正确格式,需要将前面内容补全,这样后面才能对每个章节的链接进行requests
用scrapy爬小说
利用生成器对每个章节的url发出请求,将response返回给
def parseDetail(self,response):
再对每一详情页进行正则匹配

用scrapy爬小说
用scrapy爬小说
title和chapter的提取:同上url
如何处理每一章节的后面几页:
我利用了提取下一页或者下一章,对其进行判断,当存在第二页时,用requests.get(nexturl)对获取下一页的url进行分析在同上提取chapter
将几页内容合并:因为findall返回的内容是列表形式,所以直接用chapter1+chapter2
将列表内的内容合并:chapter=’’.join(chapter)
用scrapy爬小说
再用一个生成器用于打印title和chapter
用scrapy爬小说
最后,scrapy crawl Douluo执行程序
或者scrapy crawl douluo -o 斗罗大陆.csv,将输出结果打包成一个csv文件
打开结果csv文件成了乱码:在新建查询下打开文件,将格式改成utf-8
用scrapy爬小说
用scrapy爬小说
2,xpath:
比正则简单一点
也是对页面源代码先进行分析,
最常用的路径表达式:
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
/ 从根节点选取。
@ 选取属性。
用scrapy爬小说
上面提取url,在div标签找属性class="directoryArea"下的下下节点a标签,再在a标签内找属性href的内容