利用requests库和pyquery库爬取指定页数的京东商品信息

本文介绍了一种使用Python的requests库和pyquery库抓取京东商品信息的方法,详细解析了如何从京东搜索页面中提取商品标题和价格,并通过观察URL规律实现多页数据爬取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大概思路:首先利用requests库获取京东商品搜索的页面信息,然后利用pyquery库对爬取的数据进行分析,然后利用格式化输出的方法输出所爬取的数据。

1.我们要爬取的页面信息为进入京东页面后输入关键词搜索之后的页面,获取的信息为商品的标题和商品的价格,以手机为例,URL为https://i-blog.csdnimg.cn/blog_migrate/1e6b92b2cda711da7e89de0de8d4da65.png

要爬取的页面截图为

https://i-blog.csdnimg.cn/blog_migrate/1e6b92b2cda711da7e89de0de8d4da65.png

对前几页的网址进行分析可观察出相应的规律

 第一页:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&
wq=%E6%89%8B%E6%9C%BA&pvid=76b728d7f57f43b4bb933938d08bd38c
第二页:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&
qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=3&s=58&click=0
第三页:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&
qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=5&s=114&click=0
第四页:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&
qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=7&s=170&click=0

观察前四页的代码很容易发现他们之间的不同只是page=""的不同page页数乘以2减一,所以我们可以设置URL=“https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&
qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=”页数可以设置为一个独立的变量,这样我们就可以自定义要爬取的页数了。

源代码如下:

import requests
from pyquery import PyQuery as pq       #因为PyQuery书写的时候较为复杂所以用pq 代替
url='''https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&
qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page='''
num=eval(input("请输入需要查询结果的页数"))           #自定义页数
for ii in range(num):
    url=url+str(2*ii+1)
    r=requests.get(url)
    r.encoding="utf-8"           #这一行必不可少,缺少的话就会出现没有结果的问题
    html=r.text
    print(type(html),len(html))
    text=pq(html)
    divs=text("div").filter(".p-name").items()      #items()可以让divs 成为可以遍历的类型
    prices=text("div").filter(".p-price").items()   #items()让pricess 成为可以遍历的类型
    print(type(divs))
    print(type(prices))
    name=[]
    price=[]
    t="{:^5}\t{:6}\t{:^30}"
    for div in divs:
        ems=div("a").attr("title")
        name.append(ems)
    for pricess in prices:
        price.append(pricess("i").text())
    for i in range(len(name)):
        print(t.format((30*ii)+i+1,price[i],name[i]))
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值