本次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文件,就是我们保存的文件。打开看一下效果吧: