91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

def中如何使用協程方式爬取小紅書數據

發布時間:2022-01-13 15:24:56 來源:億速云 閱讀:246 作者:小新 欄目:大數據

小編給大家分享一下def中如何使用協程方式爬取小紅書數據,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

小紅書數據采集教程,使用協程方式爬取小紅書 熱門頁 下的數據

from gevent import monkey
# 猴子補丁
monkey.patch_all()
from gevent.pool import Pool
from queue import Queue
import requests
import json
from lxml import etree


class RedBookSpider():
    """小紅書爬蟲"""

    def __init__(self, pages):
        """初始化"""
        self.url = 'https://www.xiaohongshu.com/web_api/sns/v2/trending/page/brand?page={}&page_size=20'
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Mobile Safari/537.36"
        }
        self.url_queue = Queue()
        self.pool = Pool(5)
        self.pages = pages
        pass

    def get_url(self):
        """獲取url"""
        for page in range(1, self.pages):
            url = self.url.format(page)
            self.url_queue.put(url)

    def save_data(self, items):
        """數據保存"""
        with open('./redbook.txt', 'a', encoding='utf-8') as f:
            f.write(str(items) + '\n')

    def deal_detail(self, detail_url, items, data):
        """詳情頁內容提取"""

        resp = requests.get(url=detail_url, headers=self.headers)
        eroot = etree.HTML(resp.text)
        items['fans'] = eroot.xpath('//div[@data-v-64bff0ce]/div[@class="extra"]/text()')
        items['articles'] = eroot.xpath('//div/span[@class="stats"]/text()')
        items['introduce'] = eroot.xpath('//div[@class="desc"]/div[@class="content"]/text()')
        items['detail_url'] = detail_url
        items['image'] = data['page_info']['banner']
        print(items)
        self.save_data(items)

    def deal_response(self, resp):
        """數據提取"""
        dict_data = json.loads(resp.text)
        dict_data = dict_data['data']
        for data in dict_data:
            items = {}
            items['name'] = data['page_info']['name']
            detail_url = 'https://www.xiaohongshu.com/page/brands/' + data['page_id']
            self.deal_detail(detail_url, items, data)

    def execute_task(self):
        """處理響應"""

        url = self.url_queue.get()
        resp = requests.get(url=url, headers=self.headers)
        # print(resp.text)
        self.deal_response(resp)
        self.url_queue.task_done()

    def execute_task_finished(self, result):
        """任務回調"""

        self.pool.apply_async(self.execute_task, callback=self.execute_task_finished)

    def run(self):
        """啟動程序"""

        self.get_url()
        for i in range(3):
            self.pool.apply_async(self.execute_task, callback=self.execute_task_finished)
        self.url_queue.join()

        pass


if __name__ == '__main__':
    user = RedBookSpider(4)
    # 需要爬取幾頁數據  就改為多少
    user.run()

看完了這篇文章,相信你對“def中如何使用協程方式爬取小紅書數據”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節
推薦閱讀:
  1. lua 協程
  2. GO協程

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

def
AI

大冶市| 桑植县| 油尖旺区| 治县。| 双柏县| 江北区| 华安县| 太湖县| 阿鲁科尔沁旗| 汝南县| 右玉县| 沙雅县| 泗水县| 庆安县| 丽江市| 海城市| 桃园县| 郧西县| 凉城县| 丰顺县| 措勤县| 合水县| 台中县| 乌什县| 西贡区| 兴义市| 阿合奇县| 永清县| 礼泉县| 龙里县| 鄂州市| 怀远县| 上饶市| 微山县| 山丹县| 宜宾市| 安溪县| 乌兰浩特市| 巨鹿县| 红安县| 基隆市|