excel抓取网页动态数据( 相当于页号将URL中的网址复制下来,新建一个网页)
优采云 发布时间: 2022-03-29 23:07excel抓取网页动态数据(
相当于页号将URL中的网址复制下来,新建一个网页)
!!!这里需要点击评论右下角的页码,相当于进入评论对应的页面,才能进行相应的登录。!!!
点击productCommentSummaries,Headers,中间的Request URL数据在这个地方,复制Request URL中的URL,新建一个网页打开,新的网页会显示对应的新数据(服务器只有可以通过Request URL) find data) 返回的是json数据,可以通过json数据解析,
注意一定要点击上面的评论进入评论区,或者点击评论下方的具体页码,productPageComments是查看评论内容,productCommentSummaries是查看评论总览
1.分析有效的url,即数据的格式
2.编写python代码,向服务器发送请求,获取数据,需要使用第三方模块请求,可以模拟浏览器向服务器发送请求,获取响应结果
第三方模块(相当于后面下载的美颜相机,需要安装后才能使用,安装方式为pip install requests)
通过代码获取对应url对应的数据
import requests
#第一句:导入requests模块
#第二局:发送请求
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10020640111068&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
#这里返回200表示正常,418表示遇到反爬,有时候不加headers,虽然返回的是200,但是无法显示出数据
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
reap = requests.get(url,headers = headers)
print(reap)
print(reap.text) #响应结果显示输出
该数据具有产品的产品 ID 和页面名称。如果要获取产品的所有内容,需要修改productId和page的值。
打印结果如图
但是,您需要以 json 格式获取数据。当前数据不是 json 格式。需要把前面的部分去掉,换成一个空字符串,然后通过查找json字符串中的maxPage信息,找到评论的最大页数。
解析json格式后,从json格式字符串中找到最大页数对应的属性maxPage
import requests
import json
#模拟浏览器发送请求并获取响应结果
#第一句:导入requests模块
#第二局:发送请求
def get_comments(productId,page):
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId={0}&score=0&sortType=5&page={1}&pageSize=10&isShadowSku=0&fold=1'.format(productId,page)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
reap = requests.get(url,headers = headers)
#使用python字符串的格式,{0}对应着第一个字符串,{1}对应着第二个字符串
#数据还没完事,因为数据不是json格式,需要转为json格式
#print(reap.text) #响应结果显示输出
s = reap.text.replace('fetchJSON_comment98(','')
s = s.replace(');','')
#将获取数据开头的fetchJSON_comment98(以及数据结尾处的);去除掉
#将str类型的数据转为json格式的数据
json_data = json.loads(s)
return json_data
#获取最大页数
def get_maxpage(productId):
dic_data = get_comments(productId,'0')
#调用刚才写的函数,向服务器发送请求,获取字典数据
return dic_data['maxPage']
#提取数据
#def get_info(productId):
if __name__ == '__main__':
productId = '70690115165'
print(get_maxpage(productId))
(程序思路:提供item编号,使用python程序向服务器发送请求,获取响应数据,根据key获取value,获取当前item的最大评论页数)
根据评论中的内容获取评论中的内容,使用第三方库openpyxl保存结果
import requests
import json
import time
import openpyxl
#模拟浏览器发送请求并获取响应结果
#第一句:导入requests模块
#第二局:发送请求
def get_comments(productId,page):
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId={0}&score=0&sortType=5&page={1}&pageSize=10&isShadowSku=0&fold=1'.format(productId,page)
#使用python字符串的格式,{0}对应着第一个字符串,{1}对应着第二个字符串
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
reap = requests.get(url,headers = headers)
#数据还没完事,因为数据不是json格式,需要转为json格式
#print(reap.text) #响应结果显示输出
s = reap.text.replace('fetchJSON_comment98(','')
s = s.replace(');','')
#将获取数据开头的fetchJSON_comment98(以及数据结尾处的);去除掉
#将str类型的数据转为json格式的数据
json_data = json.loads(s)
return json_data
#获取最大页数
def get_maxpage(productId):
dic_data = get_comments(productId,'0')
#调用刚才写的函数,向服务器发送请求,获取字典数据
return dic_data['maxPage']
#提取数据
def get_info(productId):
max_page = get_maxpage(productId)
#调用函数获取商品的最大评论页数
lst = [] #用于存储提取到的商品数据
for page in range(1,max_page+1): #循环执行次数
#获取每页的商品评论
comments = get_comments(productId,page)
comm_lst= comments['comments']
#根据key获取value,根据comments获取评论的列表
#遍历评论列表,分别获取每条评论中的内容,颜色,鞋码
for item in comm_lst: #每条评论又分别是一个字典,再继续根据key获取值
content = item['content'] #获取评论中的内容
color = item['productColor'] #获取评论中的颜色
size = item['productSize'] #获取评论中的鞋码
lst.append([content,color,size]) #将每条评论的信息添加到列表当中
time.sleep(3) #延迟时间,防止程序执行速度太快,被封IP
save(lst) #调用自己编写的函数,将列表中的数据进行存储
#用于将爬取到的数据存储到excel之中
def save(lst):
wk = openpyxl.Workbook() #创建工作簿对象
#一个.xlsx文件,称为一个工作簿,一个工作簿中有三个工作表
sheet = wk.active #获取活动表
#遍历列表,将列表中的数据添加到工作表中,列表中的一条数据,在excel中是一行
for item in lst:
sheet.append(item)
#保存到磁盘上
wk.save('销售数据.xlsx')
if __name__ == '__main__':
productId = '70690115165'
#print(get_maxpage(productId))
get_info(productId)
#速度比较慢,因为总共爬了10页,而且每一页隔3秒,大致需要一分钟`
从 sales data.xlsx 中提取数据并分析最畅销尺码的鞋子
#数据分析:分析不同码数的鞋子的销量
import openpyxl
#从Excel中读取数据
wk = openpyxl.load_workbook('销售数据.xlsx')
sheet = wk.active #获取活动sheet表
#获取最大行数和最大列数
rows = sheet.max_row
cols = sheet.max_column
#print(rows,cols)
#共有380行,3列,遍历涉及到了数据的
lst = [] #用于存储鞋码
for i in range(1,rows+1):
size = sheet.cell(i,3).value
#读取第三列对应的码数
lst.append(size)
#将对应的码数添加到列表之中
#从excel中将鞋子码数数据读取完毕,添加到列表中,以下操作,开始数据统计,统计不同码数的鞋子销售
#python总有一种数据结构叫字典,使用鞋码作key,使用销售数量作value
dic_size = {}
for item in lst:
dic_size[item] = 0
print(dic_size)
for item in lst:
dic_size[item] = dic_size[item]+1
print(dic_size)
总结:之前爬虫百科数据是通过网页源代码来搜索的,现在爬京东评论是通过网页交互传递的信息来实现的,两种不同的爬取信息思路