IDE:jupyter
version:Python3.5
Lib:requests、re、pyquery
最近恰巧看到斗罗大陆3尚在连载,作为斗罗1的忠实粉丝,看到斗罗3自然是兴奋不已。但无奈在网上一页页的翻看实在是太麻烦,再加上时间有限,于是便萌生了用爬虫爬取整本小说的想法。
最开始接触爬虫是在两年前开发网站时,用php写了教务系统的爬虫、CET查分的爬虫,可以称得上是几只可爱的务实的爬虫。而虽然接触Python爬虫时间也比较长了,但没几只用在正经儿的地方。而Python拥有的丰富的第三方工具库,给我们带来了不一样的体验。
因此创建Python3爬虫系列,记录我所学我所写,也分享给有需要的人。等老了再回来看看,说不定会发现年轻的自己还是年轻 :)
库简介
嗯,requests和re库较为常见,就不再这儿累赘了。
pyquery相当于jQuery的python实现,可以用于解析HTML网页等。它的语法与jQuery几乎完全相同,对于使用过jQuery的人来说很熟悉,也很好上手。免去了写正则的烦恼。
点我去官网
分析
这次我们爬取的对象是笔趣看的斗罗大陆3龙门传说
url=http://www.biqukan.com/10_10643/
我们可以看到在该目录下有很多的章节页面
查看网页源代码,发现这些链接布局简直不要太简单
从源代码上看,我们只要得到<dd>下的超链接中的链接即可。
1 2 3 4 5 |
re_result=re.findall('正文卷</dt>(.*?)</dl>',re_result,re.S) doc=pq(re_result[0]) results=doc('a').items() for result in results: yield result |
至于章节内容,我们随意点开一章
同样也是so easy,只要提取到 id=”content” class=”showtxt“中的内容即可
1 2 3 |
doc=pq(re_result) results=doc('h1').text() final_result=doc('#content').text() |
最后就是保存成txt文件啦,在这儿需要注意,open中第二个参数建议为a追加模式,如果写w会先清空txt中内容,再写入。
1 2 3 |
def write_to_file(title,content): with open('斗罗大陆3.txt', 'a', encoding='utf-8') as f: f.write(title+'\n'+content + '\n') |
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import requests from pyquery import PyQuery as pq import re import time def get_url(url): page=requests.get(url) if page.status_code ==200: return page.text return None def do_list_re(content): re_result = re.sub('\n','', content) re_result=re.findall('正文卷</dt>(.*?)</dl>',re_result,re.S) doc=pq(re_result[0]) results=doc('a').items() for result in results: yield result def do_page_re(content): re_result = re.sub('\n','', content) doc=pq(re_result) results=doc('h1').text() final_result=doc('#content').text() return results,final_result #print(re_result) def write_to_file(title,content): with open('斗罗大陆3.txt', 'a', encoding='utf-8') as f: f.write(title+'\n'+content + '\n') if __name__ == '__main__': url='http://www.biqukan.com/10_10643/' url_content=get_url(url) for result in do_list_re(url_content): page_url=result.attr.href page_content=get_url("http://www.biqukan.com"+page_url) title,final_res=do_page_re(page_content) write_to_file(title,final_res) print('正在爬取内容:'+title) |
最后
开始爬取后,喝了杯茶,不一会儿就爬取完成了
看着这一本完整的(到目前为止算是吧)斗罗3,内心还是美滋滋的~
补充:斗罗3写的是啥 – – 略无聊啊 = =