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

首頁(yè) 后端開(kāi)發(fā) Python教程 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)文章爬取和分析

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

那么,本篇文章將介紹如何使用Scrapy框架來(lái)實(shí)現(xiàn)微信公眾號(hào)文章的爬取和分析。Scrapy是一個(gè)Python的網(wǎng)絡(luò)爬蟲(chóng)框架,其主要功能是進(jìn)行數(shù)據(jù)挖掘和信息查找。因此,Scrapy具有很好的可定制性和高效性。

  1. 安裝Scrapy并創(chuàng)建項(xiàng)目

要使用Scrapy框架進(jìn)行爬蟲(chóng),首先需要安裝Scrapy和其他依賴項(xiàng)??梢允褂胮ip命令進(jìn)行安裝,安裝過(guò)程如下所示:

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

安裝Scrapy之后,我們需要使用Scrapy命令行工具來(lái)創(chuàng)建項(xiàng)目。命令如下:

scrapy startproject wechat

執(zhí)行該命令后,Scrapy將會(huì)創(chuàng)建一個(gè)名為“wechat”的項(xiàng)目,并在項(xiàng)目目錄中創(chuàng)建許多文件和目錄。

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

在我們開(kāi)始爬蟲(chóng)之前,我們需要先搞懂微信公眾號(hào)文章頁(yè)面的URL格式。一個(gè)典型的微信公眾號(hào)文章頁(yè)面的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,并用它來(lái)構(gòu)建URL。其中,biz_id 是該公眾號(hào)的唯一標(biāo)識(shí)。

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

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

接著,我們需要編寫(xiě)一個(gè)Spider,來(lái)爬取某個(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來(lái)訪問(wèn)公眾號(hào)首頁(yè),然后遞歸地遍歷每一頁(yè),提取所有文章的URL。此外,parse_article方法用于提取文章的URL和標(biāo)題,以進(jìn)行后續(xù)處理。總體而言,該Spider不是很復(fù)雜,但是提取速度較慢。

最后,我們需要在Terminal中輸入下面的命令來(lái)啟動(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ǔ)文章數(shù)據(jù)

爬取文章之后,我們需要將文章的標(biāo)題和URL保存到數(shù)據(jù)庫(kù)(如MongoDB、MySQL等)。在這里,我們將使用pymongo庫(kù)來(lái)保存爬取到的數(shù)據(jù)。

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ǔ)數(shù)據(jù)的后端。可以根據(jù)需要修改這個(gè)類來(lái)使用其他的數(shù)據(jù)庫(kù)系統(tǒng)。

接下來(lái),我們需要在settings.py文件中配置數(shù)據(jù)庫(kù)相關(guān)的參數(shù):

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

最后,我們?cè)赟pider中調(diào)用Pipeline,以將數(shù)據(jù)存儲(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')是用來(lái)獲取我們?cè)赟pider中設(shè)置的Pipeline的對(duì)象的。因此,只需在Spider代碼中添加如下代碼,就可以支持Pipeline了:

yield scrapy.Request(url, callback=self.parse_article, meta={'pipeline': 1})
  1. 數(shù)據(jù)分析

最后,我們將使用Scrapy和pandas等庫(kù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的分析和可視化。

在這里,我們將從MongoDB中提取我們爬取到的數(shù)據(jù),并將其保存到CSV文件中。隨后,我們可以使用pandas來(lái)對(duì)CSV文件進(jìn)行處理,并進(jìn)行可視化。

以下是實(shí)現(xiàn)過(guò)程:

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 庫(kù)來(lái)將爬取到的數(shù)據(jù)保存到 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)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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脫衣機(jī)

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集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(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)文章爬取和分析微信是近年來(lái)備受歡迎的社交媒體應(yīng)用,在其中運(yùn)營(yíng)的公眾號(hào)也扮演著非常重要的角色。眾所周知,微信公眾號(hào)是一個(gè)信息和知識(shí)的海洋,因?yàn)槠渲忻總€(gè)公眾號(hào)都可以發(fā)布文章、圖文消息等信息。這些信息可以被廣泛地應(yīng)用在很多領(lǐng)域中,比如媒體報(bào)道、學(xué)術(shù)研究等。那么,本篇文章將介紹如何使用Scrapy框架來(lái)實(shí)現(xiàn)微信公眾號(hào)文章的爬取和分析。Scr

Scrapy基于Ajax異步加載實(shí)現(xiàn)方法 Scrapy基于Ajax異步加載實(shí)現(xiàn)方法 Jun 22, 2023 pm 11:09 PM

Scrapy是一個(gè)開(kāi)源的Python爬蟲(chóng)框架,它可以快速高效地從網(wǎng)站上獲取數(shù)據(jù)。然而,很多網(wǎng)站采用了Ajax異步加載技術(shù),使得Scrapy無(wú)法直接獲取數(shù)據(jù)。本文將介紹基于Ajax異步加載的Scrapy實(shí)現(xiàn)方法。一、Ajax異步加載原理Ajax異步加載:在傳統(tǒng)的頁(yè)面加載方式中,瀏覽器發(fā)送請(qǐng)求到服務(wù)器后,必須等待服務(wù)器返回響應(yīng)并將頁(yè)面全部加載完畢才能進(jìn)行下一步操

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

微信公眾號(hào)認(rèn)證和不認(rèn)證的區(qū)別在認(rèn)證標(biāo)識(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)開(kāi)通微信支付功能,實(shí)現(xiàn)在線支付和商業(yè)化運(yùn)營(yíng)等等。

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

Scrapy是一個(gè)基于Python的爬蟲(chóng)框架,可以快速而方便地獲取互聯(lián)網(wǎng)上的相關(guān)信息。在本篇文章中,我們將通過(guò)一個(gè)Scrapy案例來(lái)詳細(xì)解析如何抓取LinkedIn上的公司信息。確定目標(biāo)URL首先,我們需要明確我們的目標(biāo)是LinkedIn上的公司信息。因此,我們需要找到LinkedIn公司信息頁(yè)面的URL。打開(kāi)LinkedIn網(wǎng)站,在搜索框中輸入公司名稱,在

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

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

在Scrapy爬蟲(chóng)中使用Selenium和PhantomJS 在Scrapy爬蟲(chóng)中使用Selenium和PhantomJS Jun 22, 2023 pm 06:03 PM

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

深度使用Scrapy:如何爬取HTML、XML、JSON數(shù)據(jù)? 深度使用Scrapy:如何爬取HTML、XML、JSON數(shù)據(jù)? Jun 22, 2023 pm 05:58 PM

Scrapy是一款強(qiáng)大的Python爬蟲(chóng)框架,可以幫助我們快速、靈活地獲取互聯(lián)網(wǎng)上的數(shù)據(jù)。在實(shí)際爬取過(guò)程中,我們會(huì)經(jīng)常遇到HTML、XML、JSON等各種數(shù)據(jù)格式。在這篇文章中,我們將介紹如何使用Scrapy分別爬取這三種數(shù)據(jù)格式的方法。一、爬取HTML數(shù)據(jù)創(chuàng)建Scrapy項(xiàng)目首先,我們需要?jiǎng)?chuàng)建一個(gè)Scrapy項(xiàng)目。打開(kāi)命令行,輸入以下命令:scrapys

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

隨著互聯(lián)網(wǎng)的發(fā)展,人們?cè)絹?lái)越依賴于網(wǎng)絡(luò)來(lái)獲取信息。而對(duì)于圖書(shū)愛(ài)好者而言,豆瓣圖書(shū)已經(jīng)成為了一個(gè)不可或缺的平臺(tái)。并且,豆瓣圖書(shū)也提供了豐富的圖書(shū)評(píng)分和評(píng)論,使讀者能夠更加全面地了解一本圖書(shū)。但是,手動(dòng)獲取這些信息無(wú)異于大海撈針,這時(shí)候,我們可以借助Scrapy工具進(jìn)行數(shù)據(jù)爬取。Scrapy是一個(gè)基于Python的開(kāi)源網(wǎng)絡(luò)爬蟲(chóng)框架,它可以幫助我們高效地

See all articles