打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
爬虫实战:新发地菜价

1. 观察网页结构


数据请求方式为post,提交的表单当中的有效信息为current,用来标记页码。观察表单请求之后直接返回的结果,可以看到请求了一个“getPriceData”的网页。在预览当中可以看到每次返回都是一个字典,包含了一个list,在list当中又通过字典的方式返回数据。

2. 爬取单页数据

import requests
#数据请求
url='http://www.xinfadi.com.cn/getPriceData.html'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27'}

dat = {'limit''20',
    'current':'1',
    'pubDateStartTime''',
    'pubDateEndTime':'' ,
    'prodPcatid''',
    'prodCatid':'' ,
    'prodName':'' }#表单提交获取第一页信息
resp = requests.post(url,headers=headers,data=dat)
#写入csv文件
import csv

header = ['id''prodName''prodCatid''prodCat''prodPcatid''prodPcat''lowPrice''highPrice''avgPrice''place''specInfo''unitInfo''pubDate''status''userIdCreate''userIdModified''userCreate''userModified''gmtCreate''gmtModified'#数据列名
# test.csv表示如果在当前目录下没有此文件的话,则创建一个csv文件
# “w”表示在写入之前会清空原文件中的数据
# newline是数据之间不加空行
# encoding='utf-8-sig'表示编码格式为utf-8-sig,防止打开csv文件出现中文乱码
with open('test.csv''w', newline='',encoding='utf-8-sig'as f: 
    writer = csv.DictWriter(f,fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
    writer.writeheader()  # 写入列名
    writer.writerows(resp.json()['list']) # 写入数据

检查test文件当中的内容,数据成功写入。

3. 爬取指定页面数据

前面只是爬取了一页的内容,后面我们将代码进行整合,用循环语句实现多页面的爬取与存储。

import requests
import csv

url='http://www.xinfadi.com.cn/getPriceData.html'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27'}
dic =  list()#定义一个空列表
for page in range(1,10):
    dat = {'limit''20',
        'current':page,
        'pubDateStartTime''',
        'pubDateEndTime':'' ,
        'prodPcatid''',
        'prodCatid':'' ,
        'prodName':'' }
    resp = requests.post(url,headers=headers,data=dat)
    dic.extend(resp.json()['list'])#将新的内容添加到列表当中
print(f'page{page}数据获取完毕')

header = ['id''prodName''prodCatid''prodCat''prodPcatid''prodPcat''lowPrice''highPrice''avgPrice''place''specInfo''unitInfo''pubDate''status''userIdCreate''userIdModified''userCreate''userModified''gmtCreate''gmtModified'#数据列名

# test.csv表示如果在当前目录下没有此文件的话,则创建一个csv文件
# a表示以“追加”的形式写入,如果是“w”的话,表示在写入之前会清空原文件中的数据
# newline是数据之间不加空行
# encoding='utf-8'表示编码格式为utf-8,如果不希望在excel中打开csv文件出现中文乱码的话,将其去掉不写也行。
with open('test.csv''w', newline='',encoding='utf-8-sig'as f: 
    writer = csv.DictWriter(f,fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
    writer.writeheader()  # 写入列名
    writer.writerows(dic) # 写入数据
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Python 使用csv库处理CSV文件
Python数据存储到Excel之openpyxl、pandas、csv
最新分享
r 数据读取
【R分享|提示】 新手踩过的坑,你踩过几个?(下)
做动态图表,没有数据?用Python就能获取!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服