【Python爬虫项目】新发地蔬菜水果等食品价格爬取(详细附源码) 您所在的位置:网站首页 当前水果价格 【Python爬虫项目】新发地蔬菜水果等食品价格爬取(详细附源码)

【Python爬虫项目】新发地蔬菜水果等食品价格爬取(详细附源码)

2024-06-04 11:19| 来源: 网络整理| 查看: 265

新发地获取蔬菜水果等食品价格

爬取信息具体如下: 1.食品名称 2.最低价 3.最高价 4.平均价 5.规格 6.产地 7.单位 8.发布日期

1.检查网页源码

通过检查源码可以看出数据并不在网页源码当中,需通过动态加载获取信息,打开开发者工具进行抓包

2.抓包

刷新页面,抓取商品信息,发现一页共20条商品信息。

3.分析

查看请求头信息,比对其他页请求地址发现请求地址统一为:

url = 'http://www.xinfadi.com.cn/getPriceData.html'

请求头没有特殊内容,直接复制即可 data信息包含关键参数,选取蔬菜点击刷新重新进行抓取发现有三个参数分别是:limit,current,prodPcatid。

第1页data信息 第一页data信息 第2页data信息 第2页data信息 我们可以看出前前两个参数的用处分别是

limit :商品数量current :页数

我们选择水果类再重新抓取进行分析,发现prodPcatid改变,我们知道该参数的作用是不同类的id 在这里插入图片描述

4.编写代码 import json import requests import threading import pandas as pd #新发地官网:http://www.xinfadi.com.cn/priceDetail.html #页数 page = 1 #商品总列表 count=list() #json列表 jsons=list() #解析网页函数 def url_parse(page): #请求地址 url = 'http://www.xinfadi.com.cn/getPriceData.html' headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Cache-Control": "no-cache", "Connection": "keep-alive", "Content-Length": "89", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Host": "www.xinfadi.com.cn", "Origin": "http://www.xinfadi.com.cn", "Pragma": "no-cache", "Referer": "http://www.xinfadi.com.cn/priceDetail.html", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36", "X-Requested-With": "XMLHttpRequest", } data = { "limit": "20", "current": page, "pubDateStartTime": "", "pubDateEndTime": "", "prodPcatid": "1186", #商品类id "prodCatid": "", "prodName": "", } response=requests.post(url=url,headers=headers,data=data).text #获取商品信息 response=json.loads(response)['list'] #生成线程锁对象 lock=threading.RLock() #上锁 lock.acquire() #添加到json列表中 jsons.append(response) #解锁 lock.release() #解析json函数 def json_parse(product): lock=threading.RLock() lock.acquire() dic = {'品名': product['prodName'], "最低价": product['lowPrice'], '最高价': product['highPrice'], '平均价': product['avgPrice'], '规格': product['specInfo'], '产地': product['place'], '单位': product['unitInfo'], '发布日期': product['pubDate']} print(dic) #将商品信息添加到商品总列表中 count.append(dic) lock.release() def run(): num=int(input('请输入爬取页数:')) #多进程解析网页 for i in range(1,num+1): x=threading.Thread(target=url_parse,args=(i,)) x.start() x.join() # 多进程解析json for i in jsons: for product in i: y=threading.Thread(target=json_parse,args=(product,)) y.start() y.join() #生成excel data = pd.DataFrame(count) data.to_excel('蔬菜.xlsx', index=None) if __name__ == '__main__': run() 5.运行结果 不到3秒钟就爬完了20页内容

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有