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

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

爬取信息具体如下:
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信息
我们可以看出前前两个参数的用处分别是

  1. limit :商品数量
  2. 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页内容



在这里插入图片描述

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值