excel抓取网页动态数据( 相当于页号将URL中的网址复制下来,新建一个网页)

优采云 发布时间: 2022-03-29 23:07

  excel抓取网页动态数据(

相当于页号将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)

  总结:之前爬虫百科数据是通过网页源代码来搜索的,现在爬京东评论是通过网页交互传递的信息来实现的,两种不同的爬取信息思路

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线