小福利,用gevent多協程高效爬取海量資料

littlespider889發表於2020-10-18

大家好,我是天空之城,今天給大家帶來小福利,用gevent多協程高效爬取海量資料
話不多說,程式碼如下

from gevent import monkey
monkey.patch_all()
import gevent,time,requests
from bs4 import BeautifulSoup
from gevent.queue import Queue
start = time.time()

header = {
      'Referer': 'https://movie.douban.com/top250?start=1&filter=',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:46.0) Gecko/20100101 Firefox/46.0'}

url_list =[]
for i in range(0,225,25):
    url='https://movie.douban.com/top250?start={}&filter='.format(str(i))
    url_list.append(url)

work=Queue()
for url in url_list:
    work.put_nowait(url)

def crawler():
    while not work.empty():
        url = work.get_nowait()
        res = requests.get(url,headers=header)
        film = res.text
    #這裡的res.text就是獲取到的整個網頁的所有原始碼了,下面利用 'html.parser'模組進行網頁資料的解析
        soup = BeautifulSoup(film, 'html.parser')
    #首先獲取到了所有li標籤下面的<‘div’,class_="item">標籤,構成一個大的列表
        items = soup.find_all("div",class_="item")
    #對列表進行遍歷,獲取每一部電影的相關資訊
        for item in items:
            xuhao=item.find('em').text #序號
            title=item.find(class_="title").text #電影名稱
            pingfen=item.find(class_="rating_num").text #評分
            comment=item.find(class_="inq") #評論
            if comment==None:
                comment=''
            else:
                comment = item.find(class_="inq").text  # 評論

            link=item.find('a')['href'] #網址
            #列印一下我們獲得的資訊
            print(xuhao,title,pingfen,comment,link)


task_list=[]
for x in range(5):
    task=gevent.spawn(crawler)
    task_list.append(task)
gevent.joinall(task_list)


獲取資料截圖如下
在這裡插入圖片描述

相關文章