抓取京东的某个商品价格

抓取京东的某个商品价格

来源

京东

抓取

选择一种商品搜索然后爬取商品价格信息。

import requests
res=requests.get('https://search.jd.com/Search?keyword=%E8%8B%A6%E7%93%9C&enc=utf-8&suggest=1.his.0.0&wq=&pvid=0138043bdf1d4750b99643554273c191').text
print(res)

发现结果为

<script>window.location.href='https://passport.jd.com/uc/login'</script>

需要登录,就加入User-Agent这个请求头,如图的值。
在这里插入图片描述

import requests
headers={
'User-Agent': '填写需要的部分'
}
url='https://search.jd.com/Search?keyword=%E8%8B%A6%E7%93%9C&enc=utf-8&suggest=1.his.0.0&wq=&pvid=0138043bdf1d4750b99643554273c191'
res=requests.get(url=url,headers=headers).text
print(res)

得到网址。
然后开始针对价格的代码位置
在这里插入图片描述
复制xpath值,对比

'//*[@id="J_goodsList"]/ul/li[1]/div/div[2]/strong/i'
'//*[@id="J_goodsList"]/ul/li[2]/div/div[2]/strong/i'

变化在li元素上
选择分两部分xpath

from lxml import etree
list=etree.HTML(res).xpath('//*[@id="J_goodsList"]/ul/li')
for i in list:
    p=i.xpath('div/div[2]/strong/i/text()')[0]
    print(p)

然后再看1,2,3页的网址

'https://search.jd.com/Search?keyword=%E8%8B%A6%E7%93%9C&qrst=1&suggest=1.his.0.0&wq=%E8%8B%A6%E7%93%9C&stock=1&pvid=0138043bdf1d4750b99643554273c191&page=1&s=1&click=0'
'https://search.jd.com/Search?keyword=%E8%8B%A6%E7%93%9C&qrst=1&suggest=1.his.0.0&wq=%E8%8B%A6%E7%93%9C&stock=1&pvid=0138043bdf1d4750b99643554273c191&page=3&s=56&click=0'
'https://search.jd.com/Search?keyword=%E8%8B%A6%E7%93%9C&qrst=1&suggest=1.his.0.0&wq=%E8%8B%A6%E7%93%9C&stock=1&pvid=0138043bdf1d4750b99643554273c191&page=5&s=116&click=0'

变化的值为page、s两个值,page有规律,s则难看出规律。
同时将网页翻到底部,会加载js
在这里插入图片描述
从js中取出一个数10029051555348,在网页源代码中查找
在这里插入图片描述
然后确定这些wids数与新加载的js有关,就需要正则匹配,然后使用js的请求的网址:

num=re.compile("wids:'([\d+,]+)'").findall(res)[0]
url='https://search.jd.com/s_new.php?keyword=%E8%8B%A6%E7%93%9C&qrst=1&suggest=1.his.0.0&wq=%E8%8B%A6%E7%93%9C&stock=1&pvid=0138043bdf1d4750b99643554273c191&page=4&s=86&scrolling=y&log_id=1626253412276.4471&tpl=1_M&isList=0&show_items='+num

由于仅User-Agent这个请求头不够,需要补充referer。

headers={
'referer': '填写需要的部分',
'User-Agent': '填写需要的部分'
}
res2==requests.get(url=url,headers=headers).text

此时得到响应里的源代码。
在这里插入图片描述
从代码中理解到xpath值为’//li[1]/div/div[2]/strong/i’
因此单独爬取

list=etree.HTML(res2).xpath('//li')
for i in list:
    p=i.xpath('div/div[2]/strong/i/text()')[0]
    print(p)

然后还爬取商品名,代码如下

import re
import requests
headers={
'User-Agent': '填写需要的部分'
}
url='https://search.jd.com/Search?keyword=%E8%8B%A6%E7%93%9C&enc=utf-8&suggest=1.his.0.0&wq=&pvid=0138043bdf1d4750b99643554273c191'
res=requests.get(url=url,headers=headers).text
num=re.compile("wids:'([\d+,]+)'").findall(res)[0]
url='https://search.jd.com/s_new.php?keyword=%E8%8B%A6%E7%93%9C&qrst=1&suggest=1.his.0.0&wq=%E8%8B%A6%E7%93%9C&stock=1&pvid=0138043bdf1d4750b99643554273c191&page=4&s=86&scrolling=y&log_id=1626253412276.4471&tpl=1_M&isList=0&show_items='+num
headers={
'referer': '填写需要的部分',
'User-Agent': '填写需要的部分'
}
res2=requests.get(url=url,headers=headers).text
from lxml import etree
list=etree.HTML(res).xpath('//*[@id="J_goodsList"]/ul/li')
for i in list:
    p=i.xpath('div/div[2]/strong/i/text()')[0]
    k=i.xpath('div/div[3]/a/em//text()')
    print(p,k)
list=etree.HTML(res2).xpath('//li')
for i in list:
    p=i.xpath('div/div[2]/strong/i/text()')[0]
    k=i.xpath('div/div[3]/a/em//text()')
    print(p, k)

显示:

56.00 ['苦瓜', '新鲜蔬菜农家自种 当季凉瓜现摘 1000g']
23.80 ['新鲜', '苦瓜', '1-5斤现摘农家自种蔬菜凉瓜山东生鲜瓜 五斤泡沫箱']
33.80 ['京东超市', '\t\n【买2件=发3罐 共510克】丙田 原味', '苦瓜', '茶 花草茶 泡水喝的', '苦瓜', '片', '苦瓜', '干 170克/罐']
...

如果想商品顺序一样的话,就需要cookie值。其本身就是记录用户的习惯的,因此,能更加一致。


版权声明:本文为qq_23246143原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。