说一下京东,作为主流的电商网站,里面的商品还是很齐全的,而且京东也很友好,希望看到这篇文章的小伙伴注意下自己的访问频率,善待京东服务器。
下面开始进入正题 。
https://search.jd.com/Search?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E5%A5%B3%E8%A3%85&cid2=1343&page=1&s=1&click=0
以这个网页为例。
下一页的链接还是很容易就能找到规律的。
page=页码数*2-1,s=(页码数-1)*60+1
这里就不详细说明了,这次主要说如何获取一页的全部商品。
前面的三十个商品可以请求当前链接获得
import requests
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
url ="https://search.jd.com/Search?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E5%A5%B3%E8%A3%85&cid2=1343&page=1&s=1&click=0"
response = requests.get(url, headers=headers)
后面的三十个链接就需要另外请求才能获得
首先打开开发者模式,将开发者模式里面的数据清空,然后选到js上面

然后向下滚动滚动条,当滚动条滚动到下面的商品的时候就会更新出来几条数据

这里面的数据就是我们需要的后三十条数据了。
链接看起来很长,其实可以简化的
show_items可以删掉了,tpl也可以删掉,其他的保留
然后就成这样了
https://search.jd.com/s_new.php?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E5%A5%B3%E8%A3%85&cid2=1343&page=2&s=27&scrolling=y&log_id=1550313966.86235
然后我们直接请求是得不到我们想要的数据的

因为我们的请求头缺少参数,需要添加参数,网页会判断这个请求是从哪个链接发送的
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
"referer": url,
}
从而返回相应数据

后三十条数据已经获取到了
商品数量的控制仍然是page和s,下面放上代码
import requests
url ="https://search.jd.com/Search?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E5%A5%B3%E8%A3%85&cid2=1343&page=1&s=1&click=0"
# headers = {
# "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
# }
# response = requests.get(url, headers=headers).content.decode("utf8")
# print(response)
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
"referer": url
}
url1 ="https://search.jd.com/s_new.php?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E5%A5%B3%E8%A3%85&cid2=1343&page=2&s=27&scrolling=y&log_id=1550313966.86235"
response = requests.get(url1, headers=headers).content.decode("utf8")
print(response)
网友评论