本次python實戰,主要目標是利用 Python爬取京東商品評論數,如上圖所示:爬取“Python之父”推薦的小藍書,這些信息主要包括用戶名、書名、評論等信息。
爬取的網址url是 https://item.jd.com/12531181.html ,爬取后的結果會保存在csv文件里面,便於數據分析。
01
如何准備爬蟲環境?
其實不難
環境:MAC + Python3.6 ; IDE:Pycharm. 具體使用的模塊如下。
-
import requests
-
import re
-
import json
但是如果你的系統上安裝了anaconda,模塊requests已經安裝完成,但是 pycharm軟件不能識別。
此時,需要使用preferences直接進行安裝,入下圖所示,點擊+,直接安裝即可。
02
爬蟲分析真的很重要
准備工作
我們的目標是爬取京東的《零基礎輕松學PYTHON》評論數,打開網頁發現評論的頁數很多。
也就是說我們需要解析多個頁面。因此,我們想到使用一個for循環來實現。
那么該如何找到評論的網址呢?首先,打開瀏覽器,比如chrome,然后右鍵選擇檢查,調出來網頁源代碼,如下圖:
然后,點擊Network選項卡,並且把左邊的網頁翻滾到評論數,最后搜索COMMEN。如下圖:你會發現紅框里面的URL。該網址就是我們爬取的網址。
具體的網址是 https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv36&productId=12531181&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1。通過觀察,我們發現page=0,pagesize=10等信息。
並且當你點擊下一頁時,您會發現page=2,而網址中的其他信息沒有變化,如圖所示:
因此,我們構造循環即可實現對多個網頁的爬取,比如100個網頁,代碼如下:
if __name__ == '__main__': # 循環100次 for i in range(101): main(start=i)
03
真正開始爬取評論數
兩步走
根據以前爬蟲文章(爬蟲實戰)的解析 ,我們分2步爬取本次任務。第一步是解析網頁;第二步是爬取評論數並且保存文件。
為了方便代碼可復用性和簡潔,我們把兩步寫入兩個函數里,分別是begain_scraping()和python_coments(),代碼如下:
def main(start): """ 開始爬取 :return: """ # 第一步解析網頁 comments_jd = begain_scraping(start) # 第二步 爬取評論並保存文件 python_comments(comments_jd)
04
開始解析網頁
第一步
解析網頁,也就是編寫begain_scraping(),代碼如下:
首先,根據爬取的網址(https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv36&productId=12531181&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1,我們得到下面信息:
# 構造商品地址 url_jd = 'https://sclub.jd.com/comment/productPageComments.action?callback' # 網頁信息 vari_p = { # 商品ID 'productId': 12531181, # 換成你想爬取的ID就可以了 'score': 0, 'sortType': 5, # 爬取頁面 'page': page, 'pageSize': 10, }
為了防止反爬蟲,我們構造一個偽裝瀏覽器,然后開始爬取,代碼如下:
# 防止反爬蟲,不需要更換 headers = { 'cookie': 'shshshfpaJsAhpiXZzNtbFCHZXchb60B240F81702FF', 'referer': 'https://item.jd.com/11993134.html', 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36' } comment_jd = requests.get(url=url_jd, params=vari_p, headers=headers)
05
開始爬取評論數並保存
第二步
開始爬取評論數並保存,也就是實現函數python_comment。本函數主要是對爬取的網頁解析,然后保存在CSV文件。這也是模塊化編程,邏輯清晰 ,代碼簡潔高效。具體代碼如下:
def python_comments(comment_resp): """ 爬取數據並且寫入評論 :param comment_resp: :return: """ comment_js = comment_resp.text comment_dict = json.loads(comment_js) comments_jd = comment_dict['comments'] for comment in comments_jd: user = comment['nickname'] color = comment['productColor'] comment_python = comment['content'] # 寫入文件 with open('comments_jd.csv', 'a', newline='')as csv_file: rows = (user, color, comment_python) writer = csv.writer(csv_file) writer.writerow(rows)
06
爬取結果展示
效果
首先,在pycharm軟件控制台 ,您可以看到爬取頁面信息,如下:
另外,您會在項目下面, 多了一個CSV文件,就是我們保存的文件。打開看一下效果吧: