京东只显示前30个商品问题解决
背景
在写一个爬虫脚本,爬取京东的商品信息,但是直接用url爬只能爬到前30个,原因是有30个是等你滚动滑轮后才加载的,怎么搞定呢,当然你用Selenium是可以解决的,通过模拟鼠标滚轮滑动,加载完后再做进一步处理,但是我都把东西搞完了,只差一点点了再换Selenium 有点亏,所以有了如下解决方法
方法
京东的搜索页面最开始是只加载一半的,当下拉滚动条会加载剩下的一半,又发现url中的参数page=1当点击下一页page=3,
会这样每次+2,通过下拉滚动条加载后半页抓包可见页面是发送了一个请求的,这个请求的网址的page参数是2,4,6双数的,
不难发现只要控制page这个参数每次加1就可以一个不漏的爬取所有信息了,不需要什么模拟下拉滚动条和翻页,所以要爬取1页page=1-2,爬取2页page=1-4,爬取3页page=1-6,
代码
import requests
import parsel
import xlwt
import time
url="https://search.jd.com/Search?"
#url地址
# ua伪装
cookie = "__jdu=16281293125161192648506; shshshfpa=8776e4f3-a755-2171-50bd-7a0fc1173cef-1628517781; shshshfpb=vJUqzysIJuhmezBju03dncw%3D%3D; __jdv=122270672|direct|-|none|-|1644501576395; areaId=25; ipLoc-djd=25-2270-2274-10822; qrsc=3; pinId=n8QeHs4XiNK9OiwxmTAy0g; pin=jd_aMtuvsJuaQUh; unick=jd_aMtuvsJuaQUh; _tp=hJztfGrODrEUywqsluXi3g%3D%3D; _pst=jd_aMtuvsJuaQUh; PCSYCityID=CN_530000_530600_0; user-key=9acb1757-47fe-4463-a2da-c38d3e1ac0fb; cn=4; __jdc=122270672; __jda=122270672.16281293125161192648506.1628129313.1644504516.1644545736.13; shshshfp=00d0f1a49271727ac59318194e3fe36b; rkv=1.0; token=d53516bc35e84edb76d9d8b91b1a5463,3,913637; __tk=nZp0iUbzRxAMiUp0icAEiMyMVUP0iZPyWcVwVMbznZbwnleFiUADWG,3,913637; ip_cityCode=2270; 3AB9D23F7A4B3C9B=75NIKUHPIGSJSURZN7DGO6OREPKMLNBIVOXUYJ3CJ6SV7P6QPR47KTSXJCHQUKVKMF4OS4I7ATVYQR2LILWHTAF4AQ; thor=0A405BF943C42AAB4E9805A69B911F4F3E284AAC11D0DBF1A50471AFE1C0B695B34E7E58D34EC31FC5471A5FF147FA94B2BC7F249D9AF991C18C85535EA21297F52F23946275A8129FF1E3A6B7BBBB43DB89BF410C2A8E272AF2EC28B4B0EE54E605D42789C58A07230269EEE68CA6379EB94A0E24208D7096E180AF0C4CBED2BB443238227836100DF1459F9382691D160AF0948CA4487A4B5CC20E6A933E32; _gcl_au=1.1.630140555.1644547788; shshshsID=e861be316bb47b8d9bb3fc62b08daded_12_1644547812552; __jdb=122270672.20.16281293125161192648506|13.1644545736"
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36',
'Cookie':cookie
}
n=1 # 要爬多少页
for page in range(1,n*2+1): # page从1开始,到2n
params = {
'keyword': '车机',
'page': str(page),
} # keyword 是你要搜索的关键字
res = requests.get(url=url, headers=headers, params=params)
se = parsel.Selector(res.text)
tt = se.xpath('//div[@class="gl-i-wrap"]') # 这个是京东每一个商品的div盒子,一检查就知道了,这儿就是拿到当前page中的所有商品
for txt in tt.extract(): # 对每一个商品做分析,提取
do something