1.数据采集逻辑

在进行数据采集之前,明确哪些数据为所需,制定数据Schema为爬取工作做出要求,并根据数据Schema制定出有针对性的爬取方案和采集逻辑。

2.数据Schema

3.数据爬取

抓取京东平台任一商品的评论信息,此案例抓取的商品是某一店铺的车厘子评价信息。

评论信息是由JS动态加载的,所以直接抓取商品详情页的URL并不能获得商品评论信息。因此我们需要先找到存放商品评价信息的文件,通过使用浏览器的开发者工具进行查找。

目标URL地址:

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10056364088483&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1

通过发现可知,productId为当前商品的商品Id,page为页码(从0开始),爬取该商品的所有评价信息只需要改变page参数即可。(京东商品评价页只显示前100页,所以page最大值为99)

  1. 导入库
import random
import requests
import json
import re
import csv
import time
import pymysql
  1. 对爬虫程序进行伪装
header = {
'refer': 'https: // item.jd.com /',
'cookie': '',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50'
}
  1. 抓取商品评论信息

将python程序伪装成浏览器后,就可以对评论信息进行爬取,在前面的分析中,productId和page为重要参数,在本案例中爬取的商品为车厘子,productId已确定,只需要对page进行更改即可达到需要。通过parms提交参数,使代码更有逻辑感并方便更改两个重要参数。

parm = {
'callback': 'fetchJSON_comment98',
'productId': '10056364088483',
'score': '0',
'sortType': '5',
'page': page,
'pageSize': '10',
'isShadowSku': '0',
'fold': '1'
}
url = 'https://club.jd.com/comment/productPageComments.action'
res = requests.get(url, params=parm, headers=header)

4.防止反爬,每爬取一页数据后,设置程序休眠环节

# 程序休眠
time.sleep(random.randint(40, 80) * 0.1)
print('第%d页正在爬取' % (page + 1)) 爬取完成后,需要对页面进行编码,不影响后期的数据提取和数据清洗工作。
使用正则对数据进行提取,返回字符串。
字符串转换为json格式数据。 res.encoding = 'gb18030'
html = res.text
data = re.findall('fetchJSON_comment98\((.*?)\);', html)
data = json.loads(data[0]) # 将处理的数据进行解析
comments = data['comments']
print(data['comments'])

4.数据存储

  1. 存储到csv
# 写入csv文件
f = open("evalution_data.csv", "a", newline='', encoding='gb18030')
header = ["id", "content", "creationTime", "score", "productColor", "productSize"]
# 创建一个DictWriter对象,第二个参数就是上面创建的表头
writer = csv.DictWriter(f, header)
writer.writeheader()
for i in comments:
id = i['id']
content = i['content']
creationTime = i['creationTime']
score = i['score']
productColor = i['productColor']
productSize = i['productSize']
writer.writerow(
{"id": id, "content": content, "creationTime": creationTime, "score": score, "productColor": productColor,
"productSize": productSize})
f.close()
 

  2.存储到数据库

# 写入数据库
conn = pymysql.connect(host='', user='', password='', port=, db='')
cursor = conn.cursor()
for i in comments:
id = i['id']
content = i['content']
creationTime = i['creationTime']
score = i['score']
productColor = i['productColor']
productSize = i['productSize']
sql = "insert into evalution_data(id,content,creationTime,score,productColor,productSize) values('%d','%s','%s','%d','%s','%s')"
cursor.execute(sql)
conn.commit() cursor.close()
conn.close()

Python爬虫采集商品评价信息--京东的更多相关文章

  1. python爬虫采集

    python爬虫采集 最近有个项目需要采集一些网站网页,以前都是用php来做,但现在十分流行用python做采集,研究了一些做一下记录. 采集数据的根本是要获取一个网页的内容,再根据内容筛选出需要的数 ...

  2. python爬虫之User-Agent用户信息

    python爬虫之User-Agent用户信息 爬虫是自动的爬取网站信息,实质上我们也只是一段代码,并不是真正的浏览器用户,加上User-Agent(用户代理,简称UA)信息,只是让我们伪装成一个浏览 ...

  3. python爬虫——用selenium爬取京东商品信息

    1.先附上效果图(我偷懒只爬了4页)  2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...

  4. 基于Python爬虫采集天气网实时信息

      相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...

  5. 抖音爬虫教程,python爬虫采集反爬策略

    一.爬虫与反爬简介 爬虫就是我们利用某种程序代替人工批量读取.获取网站上的资料信息.而反爬则是跟爬虫的对立面,是竭尽全力阻止非人为的采集网站信息,二者相生相克,水火不容,到目前为止大部分的网站都还是可 ...

  6. Python爬虫(一) 信息系统集成及服务资质网

    警告:不要恶意的访问网站,仅供学习使用! 本教程实例只抓取信息系统集成及服务资质网的企业资质查询. 1. 抓包 打开谷歌浏览器的开发者工具并访问该网站,过滤请求后找到请求数据的包. 1.1 找到相应封 ...

  7. Python 爬虫 JD商品-scrapy+requests

    目标站点需求分析 JD商品信息抓取 需求信息字段 涉及的库 scrapy, requests,re lxml 获取单页源码 解析单页源码 获取总页数 获取商品url 解析商品信息 保存本地文件 保存m ...

  8. python爬虫-链家租房信息获取

    #导入需要用到的模块 import requests import pymysql import time from bs4 import BeautifulSoup import tkinter a ...

  9. python爬虫采集网站数据

    1.准备工作: 1.1安装requests: cmd >> pip install requests 1.2 安装lxml: cmd >>  pip install lxml ...

  10. python爬虫-采集英语翻译

      http://fanyi.baidu.com/?aldtype=85#en/zh/drughttp://fanyi.baidu.com/?aldtype=85#en/zh/cathttp://fa ...

随机推荐

  1. 错题笔记:只有浮点型float double可以装小数

    char是不能表示小数的,如果赋值小数 则小数部分直接省略.

  2. ffmpeg将常见视频格式转换为mp4

    1,avi.mkv.mp4等格式转为mp4 ffmpeg -i 1.avi -c copy 1.mp4 2,wmv.asf等格式转为mp4 ffmpeg -i 1.asf 1.mp4

  3. cell批量改名字

    本帖最后由 wanchengchen 于 2021-7-19 10:41 编辑下面是在论坛上学习到的脚本,发上来大家一起学习,使用的是virtuoso6.1.7:layout改名字:procedure ...

  4. Kubernetes--创建Ingress资源

    创建Ingress资源 Ingress资源是基于HTTP虚拟主机或URL的转发规则,它在资源配置清单的spec字段中嵌套了rules.backend和tls等字段进行定义.下面的示例中定义了一个Ing ...

  5. app自动化前置准备&环境搭建

    编写脚本之前的一些前置准备工作. 1,安装appium server:官网地址:http://appium.io/ 安装教程:https://www.cnblogs.com/gancuimian/p/ ...

  6. 【python】读取nc文件

    读取nc文件前的准备,安装一些库 1.先把几个用到的库下载 Cartopy 简介与安装(转载) - 简书 (jianshu.com) Python Extension Packages for Win ...

  7. windows ftp 简单搭建, wget ftp

    事情起因: 公司客户一台数据库服务器突然连不上了,一开始以为是密码过期了,联系学校的老师给改了密码之后,还是连不上,然后就怀疑是不是ssh服务有问题.然后发现这台服务器上没有安装包,yum 命令也不好 ...

  8. fiddler 实现跨域

    static function OnBeforeResponse(oSession: Session) { ... if(oSession.uriContains("要处理的url" ...

  9. UVA10404

    由题意可知,这题和巴什博弈没什么关系了 相似题目:AtCoder Beginner Contest 278 F - Shiritori 预备知识:DP,博弈论的必胜态和必败态 问题的关键是确定\(f_ ...

  10. ubuntu14搭建内网gitlab服务器

    平台 宿主机系统版本:Ubuntu 14.04.5 LTS gitlab软件版本:11.10.8-ee 验证web浏览器版本:Mozilla Firefox 68.3.0esr 安装firefox浏览 ...