国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) Python教學(xué) Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取與分析

Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取與分析

Jun 22, 2023 am 09:41 AM
微信公眾號(hào) 分析。 scrapy

Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取和分析

微信是近年來備受歡迎的社群媒體應(yīng)用,在其中運(yùn)作的公眾號(hào)也扮演著非常重要的角色。眾所周知,微信公眾號(hào)是一個(gè)資訊和知識(shí)的海洋,因?yàn)槠渲忻總€(gè)公眾號(hào)都可以發(fā)布文章、圖文訊息等資訊。這些資訊可以被廣泛地應(yīng)用在許多領(lǐng)域中,例如媒體報(bào)道、學(xué)術(shù)研究等。

那麼,這篇文章將介紹如何使用Scrapy框架來實(shí)現(xiàn)微信公眾號(hào)文章的爬取與分析。 Scrapy是一個(gè)Python的網(wǎng)路爬蟲框架,主要功能是進(jìn)行資料探勘和資訊查找。因此,Scrapy具有很好的可自訂性和高效性。

  1. 安裝Scrapy並建立專案

要使用Scrapy框架進(jìn)行爬蟲,首先需要安裝Scrapy和其他相依性。可以使用pip指令進(jìn)行安裝,安裝過程如下所示:

pip install scrapy
pip install pymongo
pip install mysql-connector-python

安裝Scrapy之後,我們需要使用Scrapy命令列工具來建立專案。指令如下:

scrapy startproject wechat

執(zhí)行指令後,Scrapy將會(huì)建立一個(gè)名為「wechat」的項(xiàng)目,並在專案目錄中建立許多檔案和目錄。

  1. 實(shí)作微信公眾號(hào)文章的爬取

在我們開始爬蟲之前,我們需要先搞懂微信公眾號(hào)文章頁的URL格式。一個(gè)典型的微信公眾號(hào)文章頁面的URL長(zhǎng)這樣:

https://mp.weixin.qq.com/s?__biz=XXX&mid=XXX&idx=1&sn=XXX&chksm=XXX#wechat_redirect

其中,__biz 表示微信公眾號(hào)的ID,mid 表示文章的ID,idx 表示文章的序號(hào),sn 表示文章的簽名,chksm 表示內(nèi)容校驗(yàn)。因此,如果我們要爬取某個(gè)公眾號(hào)的所有文章,就需要找到這個(gè)公眾號(hào)的ID,並用它來建構(gòu)URL。其中,biz_id 是該公眾號(hào)的唯一識(shí)別。

首先,我們需要準(zhǔn)備一個(gè)包含許多公眾號(hào)ID的列表,因?yàn)槲覀円廊∵@些公眾號(hào)的文章。而ID的蒐集可以透過各種手段來實(shí)現(xiàn)。在這裡,我們使用一個(gè)包含幾個(gè)測(cè)試ID的列表作為例子:

biz_ids = ['MzU5MjcwMzA4MA==', 'MzI4MzMwNDgwMQ==', 'MzAxMTcyMzg2MA==']

#接著,我們需要寫一個(gè)Spider,來爬取某個(gè)公眾號(hào)的所有文章。這裡,我們將公眾號(hào)碼的名字和ID傳遞到Spider,以方便我們可以處理不同的公眾號(hào)碼ID。

import scrapy
import re

class WeChatSpider(scrapy.Spider):
    name = "wechat"
    allowed_domains = ["mp.weixin.qq.com"]
    
    def __init__(self, name=None, biz_id=None):
        super().__init__(name=name)
        self.start_urls = ['https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={}==#wechat_redirect'.format(biz_id)]

    def parse(self, response):
        article_urls = response.xpath('//h4[1]/a/@href')
        for url in article_urls.extract():
            yield scrapy.Request(url, callback=self.parse_article)
        
        next_page = response.xpath('//a[@id="js_next"]/@href')
        if next_page:
            yield scrapy.Request(response.urljoin(next_page[0].extract()), callback=self.parse)
    
    def parse_article(self, response):
        url = response.url
        title = response.xpath('//h2[@class="rich_media_title"]/text()')
        yield {'url': url, 'title': title.extract_first().strip()}

Spider的主要功能是使用給定的公眾號(hào)ID來存取公眾號(hào)首頁,然後遞歸地遍歷每一頁,提取所有文章的URL。此外,parse_article方法用於提取文章的URL和標(biāo)題,以進(jìn)行後續(xù)處理??傮w而言,該Spider不是很複雜,但是提取速度較慢。

最後,我們需要在Terminal中輸入下面的命令來啟動(dòng)Spider:

scrapy crawl wechat -a biz_id=XXXXXXXX

同樣,我們也可以爬取多個(gè)公眾號(hào),只需要在命令中指定所有公眾號(hào)的ID即可:

scrapy crawl wechat -a biz_id=ID1,ID2,ID3
  1. 儲(chǔ)存文章資料

爬取文章之後,我們需要將文章的標(biāo)題和URL儲(chǔ)存到資料庫(如MongoDB、MySQL等)。在這裡,我們將使用pymongo函式庫來保存爬取到的資料。

import pymongo

class MongoPipeline(object):
    collection_name = 'wechat'

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.collection_name].insert_one(dict(item))
        return item

在該P(yáng)ipeline中,我們使用了MongoDB作為儲(chǔ)存資料的後端??梢愿鶕?jù)需要修改這個(gè)類別來使用其他的資料庫系統(tǒng)。

接下來,我們需要在settings.py檔案中配置資料庫相關(guān)的參數(shù):

MONGO_URI = 'mongodb://localhost:27017/'
MONGO_DATABASE = 'wechat'
ITEM_PIPELINES = {'myproject.pipelines.MongoPipeline': 300}

最後,我們?cè)赟pider中呼叫Pipeline,以將資料儲(chǔ)存到MongoDB中:

class WeChatSpider(scrapy.Spider):
    name = "wechat"
    allowed_domains = ["mp.weixin.qq.com"]
    
    def __init__(self, name=None, biz_id=None):
        super().__init__(name=name)
        self.start_urls = ['https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={}==#wechat_redirect'.format(biz_id)]

    def parse(self, response):
        article_urls = response.xpath('//h4[1]/a/@href')
        for url in article_urls.extract():
            yield scrapy.Request(url, callback=self.parse_article)
        
        next_page = response.xpath('//a[@id="js_next"]/@href')
        if next_page:
            yield scrapy.Request(response.urljoin(next_page[0].extract()), callback=self.parse)
            
    def parse_article(self, response):
        url = response.url
        title = response.xpath('//h2[@class="rich_media_title"]/text()')
        yield {'url': url, 'title': title.extract_first().strip()}

        pipeline = response.meta.get('pipeline')
        if pipeline:
            item = dict()
            item['url'] = url
            item['title'] = title.extract_first().strip()
            yield item

在上面的程式碼中,response.meta.get('pipeline')是用來取得我們?cè)赟pider中設(shè)定的Pipeline的物件的。因此,只需在Spider程式碼中加入以下程式碼,就可以支援Pipeline了:

yield scrapy.Request(url, callback=self.parse_article, meta={'pipeline': 1})
  1. #資料分析

最後,我們將使用Scrapy和pandas等函式庫來實(shí)現(xiàn)數(shù)據(jù)的分析和視覺化。

在這裡,我們將從MongoDB中提取我們爬取到的數(shù)據(jù),並將其保存到CSV檔案中。隨後,我們可以使用pandas來對(duì)CSV檔案進(jìn)行處理,並進(jìn)行視覺化。

以下是實(shí)作過程:

import pandas as pd
from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['wechat']
articles = db['wechat']

cursor = articles.find()
doc = list(cursor)

df = pd.DataFrame(doc)
df.to_csv('wechat.csv', encoding='utf-8')

df.groupby('biz_id')['title'].count().plot(kind='bar')

以上程式碼中,我們使用了 MongoDB 和 Pandas 函式庫來將爬取到的資料儲(chǔ)存到 CSV 檔案的 data 資料夾內(nèi)。隨後,我們使用 Pandas 強(qiáng)大的數(shù)據(jù)分析功能將每個(gè)公眾號(hào)的文章數(shù)量進(jìn)行了視覺化展示。

以上是Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取與分析的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取與分析 Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取與分析 Jun 22, 2023 am 09:41 AM

Scrapy實(shí)現(xiàn)微信公眾號(hào)文章爬取和分析微信是近年來備受歡迎的社群媒體應(yīng)用,在其中運(yùn)作的公眾號(hào)也扮演著非常重要的角色。眾所周知,微信公眾號(hào)是一個(gè)資訊和知識(shí)的海洋,因?yàn)槠渲忻總€(gè)公眾號(hào)都可以發(fā)布文章、圖文訊息等資訊。這些資訊可以被廣泛地應(yīng)用在許多領(lǐng)域中,例如媒體報(bào)道、學(xué)術(shù)研究等。那麼,本篇文章將介紹如何使用Scrapy框架來實(shí)現(xiàn)微信公眾號(hào)文章的爬取與分析。 Scr

Scrapy基於Ajax非同步載入實(shí)作方法 Scrapy基於Ajax非同步載入實(shí)作方法 Jun 22, 2023 pm 11:09 PM

Scrapy是一個(gè)開源的Python爬蟲框架,它可以快速且有效率地從網(wǎng)站上取得資料。然而,許多網(wǎng)站採(cǎi)用了Ajax非同步載入技術(shù),使得Scrapy無法直接取得資料。本文將介紹基於Ajax非同步載入的Scrapy實(shí)作方法。一、Ajax非同步載入原理Ajax非同步載入:在傳統(tǒng)的頁面載入方式中,瀏覽器發(fā)送請(qǐng)求到伺服器後,必須等待伺服器回傳回應(yīng)並將頁面全部載入完畢才能進(jìn)行下一步操

微信公眾號(hào)認(rèn)證和不認(rèn)證有哪些差別 微信公眾號(hào)認(rèn)證和不認(rèn)證有哪些差別 Sep 19, 2023 pm 02:15 PM

微信公眾號(hào)認(rèn)證和不認(rèn)證的差異在認(rèn)證識(shí)別、功能權(quán)限、推播頻率、介面權(quán)限和使用者信任度等方面。詳細(xì)介紹:1、認(rèn)證標(biāo)識(shí),認(rèn)證公眾號(hào)會(huì)獲得官方頒發(fā)的認(rèn)證標(biāo)識(shí),即藍(lán)色V標(biāo)誌,這個(gè)標(biāo)誌可以增加公眾號(hào)的可信度和權(quán)威性,讓用戶更容易辨別真實(shí)的官方公眾號(hào); 2、功能權(quán)限,認(rèn)證公眾號(hào)相比未認(rèn)證的公眾號(hào)擁有更多的功能和權(quán)限,例如認(rèn)證公眾號(hào)可以申請(qǐng)開通微信支付功能,實(shí)現(xiàn)在線支付和商業(yè)化運(yùn)營(yíng)等等。

Scrapy案例解析:如何抓取LinkedIn上公司訊息 Scrapy案例解析:如何抓取LinkedIn上公司訊息 Jun 23, 2023 am 10:04 AM

Scrapy是一個(gè)基於Python的爬蟲框架,可以快速且方便地獲取網(wǎng)路上的相關(guān)資訊。在本篇文章中,我們將透過Scrapy案例來詳細(xì)解析如何抓取LinkedIn上的公司資訊。確定目標(biāo)URL首先,我們需要明確我們的目標(biāo)是LinkedIn上的公司資訊。因此,我們需要找到LinkedIn公司資訊頁面的URL。開啟LinkedIn網(wǎng)站,在搜尋框中輸入公司名稱,在

Scrapy優(yōu)化技巧:如何減少重複URL的爬取,提高效率 Scrapy優(yōu)化技巧:如何減少重複URL的爬取,提高效率 Jun 22, 2023 pm 01:57 PM

Scrapy是一個(gè)功能強(qiáng)大的Python爬蟲框架,可用於從網(wǎng)路上取得大量的資料。但是,在進(jìn)行Scrapy開發(fā)時(shí),經(jīng)常會(huì)遇到重複URL的爬取問題,這會(huì)浪費(fèi)大量的時(shí)間和資源,影響效率。本文將介紹一些Scrapy優(yōu)化技巧,減少重複URL的爬取,提升Scrapy爬蟲的效率。一、使用start_urls和allowed_domains屬性在Scrapy爬蟲中,可

在Scrapy爬蟲中使用Selenium和PhantomJS 在Scrapy爬蟲中使用Selenium和PhantomJS Jun 22, 2023 pm 06:03 PM

在Scrapy爬蟲中使用Selenium和PhantomJSScrapy是Python下的一個(gè)優(yōu)秀的網(wǎng)路爬蟲框架,已經(jīng)被廣泛應(yīng)用於各個(gè)領(lǐng)域中的資料收集和處理。在爬蟲的實(shí)作中,有時(shí)候需要模擬瀏覽器操作去取得某些網(wǎng)站呈現(xiàn)的內(nèi)容,這時(shí)候就需要用到Selenium和PhantomJS。 Selenium是模擬人類對(duì)瀏覽器的操作,讓我們可以自動(dòng)化地進(jìn)行網(wǎng)頁應(yīng)用程式測(cè)試

深度使用Scrapy:如何爬取HTML、XML、JSON資料? 深度使用Scrapy:如何爬取HTML、XML、JSON資料? Jun 22, 2023 pm 05:58 PM

Scrapy是一款強(qiáng)大的Python爬蟲框架,可以幫助我們快速、靈活地取得網(wǎng)路上的資料。在實(shí)際爬取過程中,我們會(huì)經(jīng)常遇到HTML、XML、JSON等各種資料格式。在這篇文章中,我們將介紹如何使用Scrapy分別爬取這三種資料格式的方法。一、爬取HTML資料建立Scrapy專案首先,我們需要建立一個(gè)Scrapy專案。打開命令列,輸入以下命令:scrapys

如何使用Scrapy爬取豆瓣圖書及其評(píng)分和評(píng)論? 如何使用Scrapy爬取豆瓣圖書及其評(píng)分和評(píng)論? Jun 22, 2023 am 10:21 AM

隨著網(wǎng)路的發(fā)展,人們?cè)絹碓揭蕾嚲W(wǎng)路來獲取資訊。而對(duì)於圖書愛好者而言,豆瓣圖書已經(jīng)成為了一個(gè)不可或缺的平臺(tái)。並且,豆瓣圖書也提供了豐富的圖書評(píng)分和評(píng)論,使讀者能夠更全面地了解一本圖書。但是,手動(dòng)取得這些資訊無異於大海撈針,這時(shí)候,我們可以藉助Scrapy工具進(jìn)行資料爬取。 Scrapy是一個(gè)基於Python的開源網(wǎng)路爬蟲框架,它可以幫助我們有效率地

See all articles