婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > python 爬取華為應(yīng)用市場(chǎng)評(píng)論

python 爬取華為應(yīng)用市場(chǎng)評(píng)論

熱門(mén)標(biāo)簽:佛山400電話辦理 市場(chǎng)上的電銷機(jī)器人 朝陽(yáng)手機(jī)外呼系統(tǒng) 儋州電話機(jī)器人 小蘇云呼電話機(jī)器人 北京電銷外呼系統(tǒng)加盟 北瀚ai電銷機(jī)器人官網(wǎng)手機(jī)版 地圖標(biāo)注面積 所得系統(tǒng)電梯怎樣主板設(shè)置外呼

代碼分享

整個(gè)項(xiàng)目我放在了github上,在python3.7下可以正常使用,如果有什么問(wèn)題歡迎大家指正。

github項(xiàng)目地址:https://github.com/LSY-C/scrapy_hauweiappstore_comment

分別爬取的一些應(yīng)用信息以及應(yīng)用的評(píng)論信息,數(shù)據(jù)結(jié)構(gòu)如下:

一、安裝并創(chuàng)建Scrapy項(xiàng)目

Scrapy官方文檔:https://docs.scrapy.org/en/latest/intro/install.html

Scrapy是一個(gè)比較好用的python爬蟲(chóng)框架,官方文檔寫(xiě)得也比較詳細(xì)??梢灾苯舆\(yùn)行以下命令安裝:

pip install Scrapy

安裝完畢后,需要?jiǎng)?chuàng)建Scrapy項(xiàng)目,相當(dāng)于是一個(gè)爬蟲(chóng)項(xiàng)目框架,在想要放置項(xiàng)目的地方打開(kāi)命令行并輸入以下命令會(huì)自動(dòng)創(chuàng)建一個(gè)名為[project_name]的文件夾,比如我這里的[project_name]是appstore,文件夾中會(huì)自動(dòng)生成的一些文件。

scrapy startproject appstore
  • appstore/scrapy.cfg中包含了用于啟動(dòng)爬蟲(chóng)的一些基礎(chǔ)配置,一般不用管它。
  • appstore/appstore/items.py:定義了爬取到的數(shù)據(jù)格式類,在這里面創(chuàng)建類來(lái)存放爬取到的數(shù)據(jù)的item格式。
  • appstore/appstore/middlewares.py:定義了爬蟲(chóng)中間鍵的一些行為,我一般也不會(huì)去動(dòng)它。
  • appstore/appstore/pipelines.py:定義了爬取到item后對(duì)其進(jìn)行的處理。
  • appstore/appstore/settings.py:是爬蟲(chóng)配置文件。
  • appstore/appstore/spiders/:這個(gè)目錄下存放的是爬蟲(chóng),也就是向網(wǎng)頁(yè)發(fā)送請(qǐng)求并受到應(yīng)答然后進(jìn)行數(shù)據(jù)處理的過(guò)程。

二、爬取應(yīng)用市場(chǎng)評(píng)論過(guò)程

爬取網(wǎng)頁(yè)信息有兩個(gè)常用的方法:

  • 直接通過(guò)xpath解析html文件
  • 依據(jù)特定格式構(gòu)造請(qǐng)求獲取json數(shù)據(jù)進(jìn)行解析

顯然前者更簡(jiǎn)單方便一些,但是現(xiàn)在許多網(wǎng)頁(yè)都是動(dòng)態(tài)的,所以后者泛用性更強(qiáng)一些,這里我爬取華為應(yīng)用市場(chǎng)上所有應(yīng)用的評(píng)論信息主要使用的是后面一種方法。

1. Scrapy爬蟲(chóng)運(yùn)行流程

首先需要大致了解Scrapy的爬蟲(chóng)是如何運(yùn)作的,分為以下幾個(gè)步驟:

  • Step1: 在項(xiàng)目的spiders文件夾中新建一個(gè).py文件,比如huawei.py,一般來(lái)說(shuō)每一個(gè)文件代表一個(gè)爬蟲(chóng),也就是對(duì)某一個(gè)網(wǎng)頁(yè)的爬取策略。
  • Step2: 創(chuàng)建一個(gè)類繼承自scrapy.Spider,類中至少需要有name、allowed_domain、start_urls變量以及一個(gè)函數(shù)parse(self)。其中name是此爬蟲(chóng)的唯一標(biāo)識(shí),之后啟動(dòng)時(shí)通過(guò)指定name來(lái)判斷啟動(dòng)哪個(gè)爬蟲(chóng)(因?yàn)閟piders文件夾中可能包含多個(gè)爬蟲(chóng)文件);allowed_domain用來(lái)指定當(dāng)前爬蟲(chóng)可以訪問(wèn)的主域名;start_urls用來(lái)指定首先獲取的頁(yè)面,而此獲取結(jié)果將會(huì)交由parse函數(shù)進(jìn)行處理。每個(gè)爬蟲(chóng)中的處理函數(shù)可能有很多個(gè),命名格式一般是parse_xxx之類的,用來(lái)處理多級(jí)頁(yè)面,比如parse處理完主頁(yè)面之后構(gòu)造新的請(qǐng)求獲取二級(jí)頁(yè)面信息并通過(guò)parse_second進(jìn)行處理,但不管怎么樣都會(huì)包含一個(gè)parse函數(shù)。
import scrapy
class HuaWei(scrapy.Spider):
    name = "huawei"
    allowed_domains = ['appstore.huawei.com', 'web-drcn.hispace.dbankcloud.cn']
    start_urls = [
        'https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTemplateserviceType=20zone=locale=zh']

    def parse(self, response):
    	pass
  • step3: 爬蟲(chóng)編寫(xiě)好之后,在項(xiàng)目根目錄(也就是scrapy.cfg文件的同級(jí)目錄)打開(kāi)命令行,并輸入以下命令啟動(dòng)爬蟲(chóng):
scrapy crawl hauwei

2. 頁(yè)面分析

首先,通過(guò)瀏覽器訪問(wèn)應(yīng)用市場(chǎng),分析一下想要爬取網(wǎng)頁(yè)的基本信息,這里我想要爬取應(yīng)用市場(chǎng)中所有應(yīng)用的評(píng)論,所以首先需要進(jìn)入到所有應(yīng)用的詳細(xì)界面,然后在詳細(xì)界面中展開(kāi)評(píng)論進(jìn)行爬取,基本的思路是:對(duì)每一個(gè)分類–>對(duì)每一個(gè)子分類–>展開(kāi)每一個(gè)應(yīng)用–>獲取應(yīng)用全部評(píng)論。

爬取的初始頁(yè)面是https://appgallery.huawei.com/#/Apps,瀏覽器中使用F12啟動(dòng)開(kāi)發(fā)者模式,調(diào)試網(wǎng)頁(yè)前端代碼,我們希望的是能夠找到頁(yè)面排版的某些規(guī)律。

頁(yè)面分析過(guò)程一

我們發(fā)現(xiàn)不管在應(yīng)用分類的選項(xiàng)卡中選擇哪一個(gè)分類或是子分類,url都不會(huì)變。也就是說(shuō),選擇分類后顯示對(duì)應(yīng)的應(yīng)用列表這一功能是動(dòng)態(tài)實(shí)現(xiàn)的,我們沒(méi)辦法通過(guò)抓取html中的信息來(lái)獲取不同分類的應(yīng)用列表,那么我們只能通過(guò)自己構(gòu)造請(qǐng)求獲取json數(shù)據(jù)的方式爬取信息。
首先,打開(kāi)調(diào)試窗口中的Network選項(xiàng)卡來(lái)分析獲取不同分類應(yīng)用列表時(shí)的網(wǎng)絡(luò)數(shù)據(jù)包:

除了第一個(gè)數(shù)據(jù)包以外,后面的都是獲取應(yīng)用圖標(biāo)數(shù)據(jù),也就是說(shuō)第一個(gè)數(shù)據(jù)包里面就包含了應(yīng)用的其他數(shù)據(jù),查看此數(shù)據(jù)包中的request_url為:

https://web-drcn.hispace.dbankcloud.cn/uowap/index
?method=internal.getTabDetail
serviceType=20
reqPageNum=1
uri=8e62cf6d238c4abdb892b400ff072f43
maxResults=25
zone=
locale=zh

我們直接在瀏覽器中訪問(wèn)此url,可以得到一個(gè)json文件,分析后發(fā)現(xiàn)此json文件中包含了列表中應(yīng)用的信息。點(diǎn)擊不同的分類、子分類,獲取不同的request_url,我們發(fā)現(xiàn),每一個(gè)子分類的request_url都只有uri字段不一樣,且默認(rèn)情況都只顯示第1頁(yè)的25個(gè)應(yīng)用。也就是說(shuō)我們以此request_url為模板,修改uri字段實(shí)現(xiàn)獲取不同類別應(yīng)用列表,修改reqPageNum字段獲取列表中的多頁(yè)應(yīng)用。

頁(yè)面分析過(guò)程二

手動(dòng)點(diǎn)進(jìn)每一個(gè)應(yīng)用的詳細(xì)界面時(shí),我們發(fā)現(xiàn),不同應(yīng)用的詳細(xì)界面的url只有最后的定位有不同,比如騰訊視頻與優(yōu)酷視頻這兩個(gè)應(yīng)用詳細(xì)界面的url分別是:

多觀察幾個(gè)應(yīng)用就會(huì)發(fā)現(xiàn)最后的那一串代碼應(yīng)該是類似于應(yīng)用唯一標(biāo)識(shí)符一樣的東西。而在上一步中,我們可以發(fā)現(xiàn)在獲取的每個(gè)應(yīng)用信息中包含能夠找到這些標(biāo)識(shí)符(‘a(chǎn)ppid'鍵的值),于是我在這里嘗試直接以這種格式構(gòu)造url請(qǐng)求獲取頁(yè)面,但是失敗了,猜測(cè)可能是頁(yè)面重定向的問(wèn)題,沒(méi)辦法,只能按部就班地通過(guò)其它方式繼續(xù)分析。
通過(guò)F12查看頁(yè)面排版,每一個(gè)app卡片中雖然有app名稱以及一些其他信息,但是找不到app詳細(xì)頁(yè)面的鏈接,因?yàn)楂@取應(yīng)用詳細(xì)信息功能被寫(xiě)成了使用js動(dòng)態(tài)獲取的,因此我們沒(méi)辦法直接從html界面中獲取,所以依舊采用構(gòu)造request_url的方法獲取json數(shù)據(jù)。

與分析過(guò)程一類似,我們可以獲取以下的request_url:

https://web-drcn.hispace.dbankcloud.cn/uowap/index
?method=internal.getTabDetail
serviceType=20
reqPageNum=1
maxResults=25
uri=app%7CC174391
shareTo=
currentUrl=https%253A%252F%252Fappgallery.huawei.com%252F%2523%252Fapp%252FC174391
accessId=
appid=C174391
zone=
locale=zh

通過(guò)此request_url獲取的json中包含了應(yīng)用的詳細(xì)信息,實(shí)際上通過(guò)測(cè)試,其中的reqPageNum、maxResults、shareTo、currentUrl、accessId、appid、zone、locale字段都是不需要的,而又發(fā)現(xiàn)uri字段中后面的“C174391”是當(dāng)前應(yīng)用的appid,也就是說(shuō)我們只需要修改uri字段的“app%7C”后面的字符串為不同應(yīng)用的appid(可以在分析過(guò)程一中的json文件里獲?。?,就可以獲取不同應(yīng)用的詳細(xì)信息。

頁(yè)面分析過(guò)程三

有了上面兩次分析的經(jīng)驗(yàn),我們繼續(xù)來(lái)爬取每個(gè)應(yīng)用的評(píng)論數(shù)據(jù),發(fā)現(xiàn)這些數(shù)據(jù)也是通過(guò)js動(dòng)態(tài)獲取的,于是繼續(xù)分析request_url,格式如下:

https://web-drcn.hispace.dbankcloud.cn/uowap/index
?method=internal.user.commenList3
serviceType=20
reqPageNum=1
maxResults=25
appid=C2002
version=10.0.0
zone=
locale=zh

與之前類似,我們可以通過(guò)修改appid字段爬取不同應(yīng)用的評(píng)論,通過(guò)修改reqPageNum字段爬取多頁(yè)評(píng)論。

3. 爬蟲(chóng)實(shí)現(xiàn)

整個(gè)爬取過(guò)程就是:構(gòu)造request_url請(qǐng)求獲取json數(shù)據(jù)–>解析json數(shù)據(jù)–>構(gòu)造新的request_url獲取json數(shù)據(jù)–>…
下面是爬蟲(chóng)中的一個(gè)處理函數(shù),功能是處理每一個(gè)應(yīng)用的詳細(xì)信息并構(gòu)造獲取評(píng)論的request_url發(fā)送新的請(qǐng)求,接下來(lái)依次說(shuō)明其中的關(guān)鍵部分。

def app_parse(self, response):
    """
    解析應(yīng)用,獲取應(yīng)用名稱、描述、資費(fèi)、版本、開(kāi)發(fā)者,然后轉(zhuǎn)至appcomment_parse進(jìn)行處理
    :param resonse:
    :return:
    """
    appid = response.meta['appid']
    app_json = json.loads(response.text)
    Name = app_json.get('layoutData')[0].get('dataList')[0].get('name')
    Star = app_json.get('layoutData')[0].get('dataList')[0].get('intro')
    Downloads = app_json.get('layoutData')[0].get('dataList')[0].get('stars')
    Price = app_json.get('layoutData')[3].get('dataList')[0].get('tariffDesc')
    Version = app_json.get('layoutData')[3].get('dataList')[0].get('version')
    Developer = app_json.get('layoutData')[3].get('dataList')[0].get('developer')
    Description = app_json.get('layoutData')[7].get('dataList')[0].get('appIntro').replace('\n', '')
    AppData = AppItem(
        AppId=appid,
        AppName=Name,
        AppDesc=Description,
        AppPrice=Price,
        AppVersion=Version,
        AppDeveloper=Developer,
        AppStar=Star,
        AppDownloads=Downloads
    )
    yield AppData
    for pagenum in range(1, 20):
        request_url = "https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.user.commenList3serviceType=20reqPageNum={}maxResults=25appid={}version=10.0.0zone=locale=zh".format(
            pagenum, appid)
        yield scrapy.Request(url=request_url, callback=self.appcomment_parse, meta={'appid': appid})

解析json并構(gòu)造請(qǐng)求

第8行中通過(guò)json.loads將響應(yīng)解析為json格式,并在后續(xù)使用鍵值與index訪問(wèn)里面的信息。

將數(shù)據(jù)保存在items中

在items.py文件中定義好Item類之后,可以在此新建一個(gè)Item對(duì)象,并在填入相應(yīng)的值,將此item返回交由pipeline.py進(jìn)行處理。

# items.py
class AppItem(scrapy.Item):
    AppId = scrapy.Field()
    AppName = scrapy.Field()
    AppDesc = scrapy.Field()
    AppPrice = scrapy.Field()
    AppVersion = scrapy.Field()
    AppDeveloper = scrapy.Field()
    AppStar = scrapy.Field()
    AppDownloads = scrapy.Field()

yield是python中的一個(gè)關(guān)鍵詞,與return類似,會(huì)讓函數(shù)返回此關(guān)鍵詞修飾的表達(dá)式值,與return不同的是,yield在返回一個(gè)值后會(huì)繼續(xù)執(zhí)行后面的代碼,而return不會(huì)。

構(gòu)造新的請(qǐng)求

在最后一行中針對(duì)所有評(píng)論列表構(gòu)造新的request_url以獲取評(píng)論信息,并通過(guò)scrapy.Request發(fā)送請(qǐng)求,其中callback指定用于處理此請(qǐng)求響應(yīng)的處理函數(shù),而meta中包含了想要傳遞給callback函數(shù)的信息。

item數(shù)據(jù)的處理

在爬取數(shù)據(jù)的過(guò)程中,處理函數(shù)會(huì)實(shí)時(shí)將不同的item返回并交由pipeline進(jìn)行處理,此時(shí)需要在pipeline.py中指定如何處理這些item,比如在此我把數(shù)據(jù)全都記錄入csv表格中。pipeline類中必須定義process_item函數(shù)來(lái)處理每一個(gè)item,而__init__與close_spider都是可選的。

class AppStorePipeline:
    def __init__(self):
        self.app_list = []
        self.comment_list = []

    def process_item(self, item, spider):	# 接收到item時(shí)調(diào)用的函數(shù)
        if isinstance(item, AppItem):
            self.app_list.append(dict(item))
        elif isinstance(item, CommentItem):
            self.comment_list.append(dict(item))
        return item

    def close_spider(self, spider):			# 當(dāng)爬蟲(chóng)關(guān)閉時(shí)調(diào)用的函數(shù)
        df_app = pd.DataFrame(self.app_list)
        df_comment = pd.DataFrame(self.comment_list)
        df_app.to_csv('app_info.csv')
        df_comment.to_csv('comment_info.csv')

以上就是python 爬取華為應(yīng)用市場(chǎng)評(píng)論的詳細(xì)內(nèi)容,更多關(guān)于python 爬取華為應(yīng)用市場(chǎng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python 爬取京東指定商品評(píng)論并進(jìn)行情感分析
  • python爬取晉江文學(xué)城小說(shuō)評(píng)論(情緒分析)
  • 利用Python網(wǎng)絡(luò)爬蟲(chóng)爬取各大音樂(lè)評(píng)論的代碼
  • 詳解用python實(shí)現(xiàn)爬取CSDN熱門(mén)評(píng)論URL并存入redis
  • python 利用百度API進(jìn)行淘寶評(píng)論關(guān)鍵詞提取
  • python 爬取騰訊視頻評(píng)論的實(shí)現(xiàn)步驟
  • python爬取微博評(píng)論的實(shí)例講解
  • python實(shí)現(xiàn)模擬器爬取抖音評(píng)論數(shù)據(jù)的示例代碼
  • 如何基于Python爬取隱秘的角落評(píng)論
  • Python實(shí)現(xiàn)爬取并分析電商評(píng)論
  • python 爬取馬蜂窩景點(diǎn)翻頁(yè)文字評(píng)論的實(shí)現(xiàn)
  • 用Python爬取QQ音樂(lè)評(píng)論并制成詞云圖的實(shí)例

標(biāo)簽:江蘇 云南 酒泉 寧夏 龍巖 金融催收 商丘 定西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python 爬取華為應(yīng)用市場(chǎng)評(píng)論》,本文關(guān)鍵詞  python,爬取,華為,應(yīng)用,市場(chǎng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python 爬取華為應(yīng)用市場(chǎng)評(píng)論》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于python 爬取華為應(yīng)用市場(chǎng)評(píng)論的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 昔阳县| 饶河县| 肃北| 昭通市| 石楼县| 会宁县| 华蓥市| 饶平县| 兴文县| 兴安盟| 塔河县| 新津县| 涪陵区| 武平县| 来安县| 绥芬河市| 八宿县| 临沭县| 凯里市| 荆州市| 汝阳县| 海口市| 绥德县| 乌鲁木齐市| 华蓥市| 荥经县| 永昌县| 宜良县| 阜新市| 贵德县| 双牌县| 南汇区| 夹江县| 青铜峡市| 三门县| 康定县| 湛江市| 尚义县| 夏河县| 镇远县| 苍梧县|