Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文
2016-12-31 22:09
627 查看
大宗师是著名网络小说作家蛇从革的系列作品“宜昌鬼事”之一,在天涯论坛具有超级高的访问量。这个长篇小说于2015年3月17日开篇,并于2016年12月29日大结局,期间每天有7万多读者阅读。如果在天涯社区直接阅读的话,会被很多读者留言干扰,如图
于是,我写了下面的代码,从天涯社区该小说的第一篇开始依次爬取每一页,提取作者“蛇从革”发过的文字并保存成为记事本文档。当然,代码还可以再优化一下,例如有时候作者就发了一句话“今天没有了”,按说这样的话可以过滤掉,大家可以自行修改。
在运行代码之前,首先要正确安装Python的爬虫框架scrapy,这个扩展库在Python 2.7.x中表现一直不错,现在也支持Python 3.5.x以及更新版本,可以使用pip直接进行安装,但是scrapy依赖的某些扩展库对高版本Python支持并不是很好,在使用pip安装scrapy的过程中如果某个依赖的扩展库安装失败,可以到网上下载相应的whl文件进行安装,重复上面的过程,知道出现“Successfully installed...”这样的提示。
接下来就是创建爬虫项目了,进入命令提示符(cmd)环境,切换至Python安装目录的scripts目录,执行命令scrapy startproject xiaoshuo创建爬虫项目xiaoshuo,进入该目录,然后编写Python程序文件\spiders\spiderYichangGuishi.py(内容就是下面的代码),然后在命令提示符环境中执行命令scrapy crawl spiderYichangGuishi,稍等大概3分钟左右即可爬取小说全文并生成记事本文档。
当然,在编写爬虫代码之前,需要对目标网站进行分析一下,打开要小说首页,右键,单击“查看源代码”,然后分析网页结构,如图,红色标记处是比较重点的地方。
\spiders\spiderYichangGuishi.py代码如下:
import scrapy
class
MySpider(scrapy.spiders.Spider):
#爬虫的名字,每个爬虫必须有不同的名字
name = 'spiderYichangGuishi'
#要爬取的小说首页,第一篇
start_urls = ['http://bbs.tianya.cn/post-16-1126849-1.shtml']
#对每个要爬取的页面,会自动调用下面这个方法
def
parse(self, response):
#用来存放当前页中的小说正文
content = []
for i
in response.xpath('//div'):
#作者蛇从革的天涯账号
if i.xpath('@_hostid').extract()==['13357319']:
for j
in i.xpath('div//div'):
#提取文本
c = j.xpath('text()').extract()
#过滤干扰符号
g =
lambda x:x.strip('\n\r\u3000').replace('<br>',
'\n').replace('|',
'')
c =
'\n'.join(map(g, c)).strip()
content.append(c)
with
open('result.txt',
'a+', encoding='utf8')
as fp:
fp.writelines(content)
#获取下一页网址并继续爬取
url = response.url
d = url[url.rindex('-')+1:url.rindex('.')]
next_url =
'http://bbs.tianya.cn/post-16-1126849-{0}.shtml'.format(int(d)+1)
try:
yield scrapy.Request(url=next_url, callback=self.parse)
except:
pass
爬取到的小说大概就是下面的样子了
更多Python技术文章请关注微信公众号“Python小屋”阅读。
于是,我写了下面的代码,从天涯社区该小说的第一篇开始依次爬取每一页,提取作者“蛇从革”发过的文字并保存成为记事本文档。当然,代码还可以再优化一下,例如有时候作者就发了一句话“今天没有了”,按说这样的话可以过滤掉,大家可以自行修改。
在运行代码之前,首先要正确安装Python的爬虫框架scrapy,这个扩展库在Python 2.7.x中表现一直不错,现在也支持Python 3.5.x以及更新版本,可以使用pip直接进行安装,但是scrapy依赖的某些扩展库对高版本Python支持并不是很好,在使用pip安装scrapy的过程中如果某个依赖的扩展库安装失败,可以到网上下载相应的whl文件进行安装,重复上面的过程,知道出现“Successfully installed...”这样的提示。
接下来就是创建爬虫项目了,进入命令提示符(cmd)环境,切换至Python安装目录的scripts目录,执行命令scrapy startproject xiaoshuo创建爬虫项目xiaoshuo,进入该目录,然后编写Python程序文件\spiders\spiderYichangGuishi.py(内容就是下面的代码),然后在命令提示符环境中执行命令scrapy crawl spiderYichangGuishi,稍等大概3分钟左右即可爬取小说全文并生成记事本文档。
当然,在编写爬虫代码之前,需要对目标网站进行分析一下,打开要小说首页,右键,单击“查看源代码”,然后分析网页结构,如图,红色标记处是比较重点的地方。
\spiders\spiderYichangGuishi.py代码如下:
import scrapy
class
MySpider(scrapy.spiders.Spider):
#爬虫的名字,每个爬虫必须有不同的名字
name = 'spiderYichangGuishi'
#要爬取的小说首页,第一篇
start_urls = ['http://bbs.tianya.cn/post-16-1126849-1.shtml']
#对每个要爬取的页面,会自动调用下面这个方法
def
parse(self, response):
#用来存放当前页中的小说正文
content = []
for i
in response.xpath('//div'):
#作者蛇从革的天涯账号
if i.xpath('@_hostid').extract()==['13357319']:
for j
in i.xpath('div//div'):
#提取文本
c = j.xpath('text()').extract()
#过滤干扰符号
g =
lambda x:x.strip('\n\r\u3000').replace('<br>',
'\n').replace('|',
'')
c =
'\n'.join(map(g, c)).strip()
content.append(c)
with
open('result.txt',
'a+', encoding='utf8')
as fp:
fp.writelines(content)
#获取下一页网址并继续爬取
url = response.url
d = url[url.rindex('-')+1:url.rindex('.')]
next_url =
'http://bbs.tianya.cn/post-16-1126849-{0}.shtml'.format(int(d)+1)
try:
yield scrapy.Request(url=next_url, callback=self.parse)
except:
pass
爬取到的小说大概就是下面的样子了
更多Python技术文章请关注微信公众号“Python小屋”阅读。
相关文章推荐
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- 【python爬虫】scrapy框架笔记(一):创建工程,使用scrapy shell,xpath
- Python之Scrapy爬虫框架安装及简单使用
- Python之Scrapy爬虫框架安装及简单使用
- 讲解Python的Scrapy爬虫框架使用代理进行采集的方法
- python爬虫(16)使用scrapy框架爬取顶点小说网
- Python之Scrapy爬虫框架安装及简单使用详解
- 【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息
- linux下在服务器上配置scrapy框架的python爬虫,使用mysql数据库保存
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- Python爬虫框架Scrapy安装使用步骤
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- Python之Scrapy爬虫框架安装及使用详解
- 使用python scrapy爬虫框架 爬取科学网自然科学基金数据
- windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- 讲解Python的Scrapy爬虫框架使用代理进行采集的方法
- Python 爬虫框架 Scrapy 快速使用
- python爬虫scrapy框架灵巧使用