日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 爬取華為應用市場評論

瀏覽:126日期:2022-06-18 09:25:36
目錄代碼分享一、安裝并創建Scrapy項目二、爬取應用市場評論過程1. Scrapy爬蟲運行流程2. 頁面分析頁面分析過程一頁面分析過程二頁面分析過程三3. 爬蟲實現解析json并構造請求將數據保存在items中構造新的請求item數據的處理代碼分享

整個項目我放在了github上,在python3.7下可以正常使用,如果有什么問題歡迎大家指正。

github項目地址:https://github.com/LSY-C/scrapy_hauweiappstore_comment

分別爬取的一些應用信息以及應用的評論信息,數據結構如下:

python 爬取華為應用市場評論

python 爬取華為應用市場評論

一、安裝并創建Scrapy項目

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

Scrapy是一個比較好用的python爬蟲框架,官方文檔寫得也比較詳細。可以直接運行以下命令安裝:

pip install Scrapy

安裝完畢后,需要創建Scrapy項目,相當于是一個爬蟲項目框架,在想要放置項目的地方打開命令行并輸入以下命令會自動創建一個名為[project_name]的文件夾,比如我這里的[project_name]是appstore,文件夾中會自動生成的一些文件。

scrapy startproject appstore appstore/scrapy.cfg中包含了用于啟動爬蟲的一些基礎配置,一般不用管它。 appstore/appstore/items.py:定義了爬取到的數據格式類,在這里面創建類來存放爬取到的數據的item格式。 appstore/appstore/middlewares.py:定義了爬蟲中間鍵的一些行為,我一般也不會去動它。 appstore/appstore/pipelines.py:定義了爬取到item后對其進行的處理。 appstore/appstore/settings.py:是爬蟲配置文件。 appstore/appstore/spiders/:這個目錄下存放的是爬蟲,也就是向網頁發送請求并受到應答然后進行數據處理的過程。 二、爬取應用市場評論過程

爬取網頁信息有兩個常用的方法:

直接通過xpath解析html文件 依據特定格式構造請求獲取json數據進行解析

顯然前者更簡單方便一些,但是現在許多網頁都是動態的,所以后者泛用性更強一些,這里我爬取華為應用市場上所有應用的評論信息主要使用的是后面一種方法。

1. Scrapy爬蟲運行流程

首先需要大致了解Scrapy的爬蟲是如何運作的,分為以下幾個步驟:

Step1: 在項目的spiders文件夾中新建一個.py文件,比如huawei.py,一般來說每一個文件代表一個爬蟲,也就是對某一個網頁的爬取策略。 Step2: 創建一個類繼承自scrapy.Spider,類中至少需要有name、allowed_domain、start_urls變量以及一個函數parse(self)。其中name是此爬蟲的唯一標識,之后啟動時通過指定name來判斷啟動哪個爬蟲(因為spiders文件夾中可能包含多個爬蟲文件);allowed_domain用來指定當前爬蟲可以訪問的主域名;start_urls用來指定首先獲取的頁面,而此獲取結果將會交由parse函數進行處理。每個爬蟲中的處理函數可能有很多個,命名格式一般是parse_xxx之類的,用來處理多級頁面,比如parse處理完主頁面之后構造新的請求獲取二級頁面信息并通過parse_second進行處理,但不管怎么樣都會包含一個parse函數。

import scrapyclass 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.getTemplate&serviceType=20&zone=&locale=zh’] def parse(self, response): pass step3: 爬蟲編寫好之后,在項目根目錄(也就是scrapy.cfg文件的同級目錄)打開命令行,并輸入以下命令啟動爬蟲:

scrapy crawl hauwei2. 頁面分析

首先,通過瀏覽器訪問應用市場,分析一下想要爬取網頁的基本信息,這里我想要爬取應用市場中所有應用的評論,所以首先需要進入到所有應用的詳細界面,然后在詳細界面中展開評論進行爬取,基本的思路是:對每一個分類?>對每一個子分類?>展開每一個應用?>獲取應用全部評論。

python 爬取華為應用市場評論

python 爬取華為應用市場評論

python 爬取華為應用市場評論

爬取的初始頁面是https://appgallery.huawei.com/#/Apps,瀏覽器中使用F12啟動開發者模式,調試網頁前端代碼,我們希望的是能夠找到頁面排版的某些規律。

頁面分析過程一

我們發現不管在應用分類的選項卡中選擇哪一個分類或是子分類,url都不會變。也就是說,選擇分類后顯示對應的應用列表這一功能是動態實現的,我們沒辦法通過抓取html中的信息來獲取不同分類的應用列表,那么我們只能通過自己構造請求獲取json數據的方式爬取信息。首先,打開調試窗口中的Network選項卡來分析獲取不同分類應用列表時的網絡數據包:

python 爬取華為應用市場評論

除了第一個數據包以外,后面的都是獲取應用圖標數據,也就是說第一個數據包里面就包含了應用的其他數據,查看此數據包中的request_url為:

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

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

頁面分析過程二

手動點進每一個應用的詳細界面時,我們發現,不同應用的詳細界面的url只有最后的定位有不同,比如騰訊視頻與優酷視頻這兩個應用詳細界面的url分別是:

python 爬取華為應用市場評論

多觀察幾個應用就會發現最后的那一串代碼應該是類似于應用唯一標識符一樣的東西。而在上一步中,我們可以發現在獲取的每個應用信息中包含能夠找到這些標識符(‘appid’鍵的值),于是我在這里嘗試直接以這種格式構造url請求獲取頁面,但是失敗了,猜測可能是頁面重定向的問題,沒辦法,只能按部就班地通過其它方式繼續分析。通過F12查看頁面排版,每一個app卡片中雖然有app名稱以及一些其他信息,但是找不到app詳細頁面的鏈接,因為獲取應用詳細信息功能被寫成了使用js動態獲取的,因此我們沒辦法直接從html界面中獲取,所以依舊采用構造request_url的方法獲取json數據。

python 爬取華為應用市場評論

與分析過程一類似,我們可以獲取以下的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

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

頁面分析過程三

有了上面兩次分析的經驗,我們繼續來爬取每個應用的評論數據,發現這些數據也是通過js動態獲取的,于是繼續分析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

與之前類似,我們可以通過修改appid字段爬取不同應用的評論,通過修改reqPageNum字段爬取多頁評論。

3. 爬蟲實現

整個爬取過程就是:構造request_url請求獲取json數據?>解析json數據?>構造新的request_url獲取json數據?>…下面是爬蟲中的一個處理函數,功能是處理每一個應用的詳細信息并構造獲取評論的request_url發送新的請求,接下來依次說明其中的關鍵部分。

def app_parse(self, response): ''' 解析應用,獲取應用名稱、描述、資費、版本、開發者,然后轉至appcomment_parse進行處理 :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.commenList3&serviceType=20&reqPageNum={}&maxResults=25&appid={}&version=10.0.0&zone=&locale=zh'.format( pagenum, appid)yield scrapy.Request(url=request_url, callback=self.appcomment_parse, meta={’appid’: appid})解析json并構造請求

第8行中通過json.loads將響應解析為json格式,并在后續使用鍵值與index訪問里面的信息。

將數據保存在items中

在items.py文件中定義好Item類之后,可以在此新建一個Item對象,并在填入相應的值,將此item返回交由pipeline.py進行處理。

# items.pyclass 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中的一個關鍵詞,與return類似,會讓函數返回此關鍵詞修飾的表達式值,與return不同的是,yield在返回一個值后會繼續執行后面的代碼,而return不會。

構造新的請求

在最后一行中針對所有評論列表構造新的request_url以獲取評論信息,并通過scrapy.Request發送請求,其中callback指定用于處理此請求響應的處理函數,而meta中包含了想要傳遞給callback函數的信息。

item數據的處理

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

class AppStorePipeline: def __init__(self):self.app_list = []self.comment_list = [] def process_item(self, item, spider):# 接收到item時調用的函數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):# 當爬蟲關閉時調用的函數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 爬取華為應用市場評論的詳細內容,更多關于python 爬取華為應用市場的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲亚洲| 男人的天堂亚洲一区| 999在线观看精品免费不卡网站| 国产精品一线| 欧美精品羞羞答答| 国产福利91精品一区二区| 日韩成人精品一区二区三区| 中文精品在线| 黑人精品一区| 欧美一级二区| 视频一区二区国产| 伊人精品一区| 日韩欧美三级| 国产精品xx| 国产a亚洲精品| 嫩草伊人久久精品少妇av杨幂| 亚洲精品伦理| 只有精品亚洲| 中文字幕日韩亚洲| 国产精品7m凸凹视频分类| 日韩免费福利视频| 国产99在线| 久久久久久色| 亚洲a级精品| 最新亚洲一区| 伊人久久大香线蕉av超碰演员| 久久国产直播| 日韩一区亚洲二区| 麻豆成人av在线| 久久婷婷国产| 黄色精品视频| 国产高潮在线| 久久久一本精品| 亚洲午夜电影| 亚洲精品成人| 亚洲黄色影院| 久久国产精品99国产| 三级欧美韩日大片在线看| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线精品国产亚洲| 91精品一区| 国产精品亚洲人成在99www| 国产精品极品在线观看| 久久精品一区二区国产| 久久精品五月| 国产精品白浆| 国产+成+人+亚洲欧洲在线| 国产a亚洲精品| 中文在线中文资源| 日韩成人亚洲| 9国产精品视频| 综合一区二区三区| 国产欧美精品| 高清av一区| 国产精品7m凸凹视频分类| 亚洲一区国产一区| 日韩高清一区在线 | 久久不射中文字幕| 一区二区三区四区日韩| 国产精品亚洲欧美日韩一区在线| 国产一区二区三区黄网站| 日韩中文首页| 国产综合激情| 日韩中文字幕亚洲一区二区va在线| 日本不卡在线视频| 麻豆精品国产91久久久久久| 日韩av免费| 国产亚洲高清视频| 亚洲一区日韩| 亚洲精品婷婷| 国产精品久久久久久av公交车| 9999国产精品| 蜜桃av一区二区三区电影| 国产一级成人av| 岛国av免费在线观看| 亚洲精品国产嫩草在线观看| 欧美在线资源| 日韩中文一区二区| 国产成人久久精品一区二区三区| 尤物tv在线精品| 日韩中出av| 精品一区二区三区中文字幕视频| 中文在线а√天堂| 香蕉成人久久| 狠狠久久伊人中文字幕| 黄色精品网站| 美女在线视频一区| 精品欧美久久| 欧美日韩xxxx| 久久久久久免费视频| 青青青国产精品| 亚洲高清毛片| 日韩av一区二区三区| 中文字幕成在线观看| 免费久久精品视频| 国产伦久视频在线观看| 亚洲精品动态| 久久久久网站| 国产欧美一区二区三区米奇| 极品日韩av| 老司机免费视频一区二区| 宅男噜噜噜66国产日韩在线观看| 久久伊人亚洲| 免费高清在线一区| 日韩欧美精品综合| 日韩精品一二区| 国产精品xxxav免费视频| 99热精品久久| 欧美日韩1区| 成人免费网站www网站高清| 日韩不卡手机在线v区| 欧美日韩视频网站| 婷婷精品在线观看| 蜜桃视频在线网站| 欧美日韩一区二区三区在线电影| 中文字幕成在线观看| 国产日韩欧美一区二区三区| 狠狠干成人综合网| av资源亚洲| 国产精品久久久久久久久久妞妞| 中文亚洲免费| 韩国三级一区| 国产女人18毛片水真多18精品| 五月婷婷六月综合| 日韩在线综合| 精品日韩一区| 国产亚洲电影| 一区二区91| 樱桃成人精品视频在线播放| 日韩免费在线| 日本精品久久| 国产毛片一区| 岛国av在线网站| 日韩精品亚洲专区| 欧美日韩国产综合网| 国产一区二区三区四区五区传媒| 日韩av影院| 亚洲精品亚洲人成在线观看| 日韩中文字幕高清在线观看| 精品视频在线观看网站| 欧美亚洲福利| 日韩福利视频一区| 亚洲tv在线| 亚洲人妖在线| 首页国产欧美久久| 亚洲精品网址| 999国产精品视频| 国产精品麻豆久久| 国产精品magnet| 国产伦精品一区二区三区在线播放| 欧美女激情福利| 久久中文字幕二区| 99精品在线观看| 成人欧美一区二区三区的电影| 麻豆国产精品视频| 久久伊人久久| 精品72久久久久中文字幕| 美女国产精品久久久| 久久国产生活片100| 欧美一区久久| 国产精品亚洲欧美日韩一区在线| 国产欧美一区二区三区国产幕精品 | 国产综合色产| 激情久久五月| 99在线精品免费视频九九视| 午夜久久美女| 亚洲欧美久久久| 亚洲一区欧美| 一区二区三区四区日韩| 亚洲v天堂v手机在线| 日韩精品视频在线看| 国产精品亚洲综合在线观看| 欧美一区激情| 欧美日韩1区2区3区| 国产一区精品福利| 久久久国产亚洲精品| 免费在线成人网| 欧美精品第一区| 婷婷成人基地| 国产精品对白| 不卡一区2区| 国产精品久久久免费| 免费av一区| 久久av网址| 午夜在线精品偷拍| 精品视频网站| 水野朝阳av一区二区三区| 美腿丝袜亚洲一区| 狠狠干综合网| 精品国产美女a久久9999| 欧美精品羞羞答答| 国产精品a级| 国产毛片一区| 老牛影视精品| 欧美日韩一区二区三区四区在线观看| 亚洲人成在线网站| 亚洲免费专区| 99精品视频在线| 国产福利资源一区| 蜜臀久久久久久久|