在学习作者谢乾坤的《Python爬虫开发 从入门到实战》微课版的4.4节时,对阶段案例——小说网站爬虫开发进行一个学习总结。
需求分析:
从一个网址中爬取《动物农场》所有章节的网址,再通过一个多线程爬虫将每一章的内容爬取下来。在本地创建一个“动物农场”文件夹,并将小说中的每一章分别保存到这个文件夹中。每一章保存为一个文件。
涉及知识点:
(1)使用requests获取网页源代码。
(2)使用正则表达式获取内容。
(3)文件 *** 作。
(4)线程池 *** 作。
核心代码参考作者谢乾坤的《Python爬虫开发 从入门到实战》微课版的4.4节。
main代码编写如下:
# html = requests.get('https://www.kanunu8.com/book3/6879/')
# print(html.apparent_encoding) #GB2312,需要解码,否则无法读取
html = requests.get('https://www.kanunu8.com/book3/6879/').content.decode('GB2312')
chapter_html = get_toc(html) #获取章节链接,放入chapter_html中
# print(f'chapter_html={chapter_html}')
# chapter_name,text_block=get_article(chapter_html[0])
# print(chapter_name)
# print(text_block)
#创建线程池,创建多线程爬虫
pool=Pool(10)
result1=pool.map(get_article,chapter_html)
result2=pool.starmap(save,result1)
学习总结:
(1)利用request获取网址源代码时,需要查看网址原编码,进行解码,否则读取不了源代码,会出错。
(2)抓取文章网址时,需要使用先抓大再抓小的技巧。
(3)使用多线程进行 *** 作时,因为get_article函数会返回两个参数,而map只允许运行携带一个参数的函数,所以要用starmap函数,可以携带两个参数。
最终运行结果如下:
(1)产生一个文件夹在指定路径:
(2)文件夹中有一到十章的.txt文件:
(3).txt文件中有抓取下来的内容
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)