学习多线程爬虫案例记录

 在学习作者谢乾坤的《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)产生一个文件夹在指定路径:

学习多线程爬虫案例记录_第1张图片

(2)文件夹中有一到十章的.txt文件:

(3).txt文件中有抓取下来的内容

学习多线程爬虫案例记录_第2张图片

你可能感兴趣的:(爬虫,动物农场,python,爬虫)