前言

看完视频后,便实践去爬取北京新发地的菜价,但该网页相较于视频中爬取时有了较大变化,但并不影响爬取,也是我第一次爬取这样的情况,下面开始演示

爬取过程

准备阶段

集成开发环境:Pycharm
相关模块:requests、re
知识储备:直观来讲,看完爬虫1000集前27集即可,但要稍微理解里面所讲知识的内核,需要一些基础(HTML+CSS、请求响应、HTTP、Cookie和Session、正则表达式、Python、爬取),这些基础可以边学边用边补充,妨碍不大

实践

来到网页后通过查看网页源代码可以发现是客户端渲染,也就是数据是通过第二次请求后获取的,具体怎么获取,可以打开开发者工具,然后切换到Network选项卡,按F5刷新下,然后选择XHR选项,即可在下面找到数据

XHR全称XMLHttpRequest,是一组API函数集,可被JS、VBScript及web浏览器内嵌脚本语言调用,通过HTTP在浏览器和web服务器之间收发XML或其它数据。

python获取302跳转的cookie和url python获取xhr_HTTP

然后就是代码实现

import re
import requests
import csv

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

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

dat = {
    "prodCatid": "1186"
}

# 发送post请求

resp = requests.post(url,data=dat,headers=headers)

info = resp.json()
print(type(info))
vegetable = info['list']
# print(vegetable) # 观察数据保存的具体情况
sclist = []
for item in vegetable:
    scdict = {}
    # 品名
    prodName = item['prodName']
    # 最低价
    lowPrice = item['lowPrice']
    # 平均价
    avgPrice = item['avgPrice']
    # 最高价
    highPrice = item['highPrice']
    # 规格
    specInfo = item['specInfo']
    # 产地
    place = item['place']
    # 单位
    unitInfo = item['unitInfo']
    # 发布日期
    pubDate = item['pubDate']

    scdict['品名'] = prodName
    scdict['最低价'] = lowPrice
    scdict['平均价'] = avgPrice
    scdict['最高价'] = highPrice
    scdict['规格'] = specInfo
    scdict['产地'] = place
    scdict['单位'] = unitInfo
    scdict['发布日期'] = pubDate
    sclist.append(scdict)

header = ['品名','最低价','平均价','最高价','规格','产地','单位','发布日期']
with open('北京新发地蔬菜价格查询.csv','w',encoding='utf-8',newline='') as f:
    writer = csv.DictWriter(f,header)
    writer.writeheader()
    writer.writerows(sclist)
resp.close()

代码讲解

首先就是抓取到数据所在的具体url,然后就是获取其内容,在通过type(info)了解内容是以字典形式保存,然后继续输出数据print(vegetable)分析具体保存情况,了解到序列中嵌套着序列,之后就是赋值然后添加到字典,然后将字典添加到列表中,最后在通过csv模块写入到csv文件中,其中写入即writerows采用的是多行写入,这里必须要采用多行写入,不清楚可以看我写的(Python)爬虫学习(三)这篇文章

其中因为是post方式提交,需要找到form data并请求,现在form data存在位置变成如下图所示

python获取302跳转的cookie和url python获取xhr_python_02


运行结果如下

python获取302跳转的cookie和url python获取xhr_爬虫_03

小结

没有什么难度,剩下的就是爬取美女图片了,也是我当初学爬虫的目的,也只是当初,毕竟,我虽然喜欢看高颜值姑娘的,但也更容易被有内涵的姑娘所打动,开玩笑,继续努力~