在我上班的企业,爬取数据时,简单地用Requests,复杂一点的用Scrapy。解析方式,用正则表达式、BeautifulSoup或Lxml的都有,怎么解析方便,就怎么解析。

技术是很灵活的,没必要非得分个子丑寅卯,怎么合适怎么来,能高效地完成工作就好。从我发布Python搞定网络爬虫以来,就有人装得好牛叉一样,说这样不是爬虫技术,说爬虫技术不是这样的,你看,这种朋友,就掉入了思维的坑里了。

当然,也有朋友提出,在爬取《盗墓笔记》时,速度很慢,从这可以看出,有人真的在实践中,不断地挑战、提高自己。这种人,假以时日,肯定会成为技术大牛的。

既然有人提到爬取速度慢的问题,在《10天搞定Python网络爬虫》的最后一天,我就补上这部分的内容吧--用简单易用的多进程(Python库),提高爬取速度。

10.1 多进程爬取

Python进行多进程爬虫,使用了multiprocessing库,为了能让你直观地看到效果,我采用了有用进程和没有用进程的方法进行比较。爬取的网址,我就不再找新的了,直接在之前的糗事百科的基础上,进行调整。

import requestsimport reimport timefrom multiprocessing import Processheaders = {    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "                  "(KHTML, like Gecko) Chrome/86.0.4240."}url = "https://www.qiushibaike.com/text/"# 主方法def main(num):    res = requests.get(url, headers=headers)    if res.status_code == 200:        html = res.text        result = re.sub(r"|
", "",                        str(re.findall(r'

(.*?)

', html, re.S))) items = re.findall(r'(.*?)', result, re.S) for i, text in enumerate(items): print(str(i + 1) + ".", text) else: print("服务器没响应")if __name__ == '__main__': # 单进程 start1 = time.time() main(1) end1 = time.time() print("单进程爬取时间:", end1 - start1) # ------四个进程爬取-------------- start2 = time.time() for i in range(4): p = Process(target=main, args=(i,)) p.start() end2 = time.time() print("四个进程爬取时间:", end2 - start2)

输出结果(省略了段子内容)

单进程爬取时间: 0.15570998191833496四个进程爬取时间: 0.027610063552856445



python速成课 python10天速成_多进程