首先在京东的页面,搜索任意想买的东西,我搜索的是“裤子”,在火狐浏览器当前页面中,右键-查看页面元素,找到商品的部分代码,想要抓取的部分数据如下:
点击左侧框选部分,然后,鼠标移动到底下的代码,就可以快速定位到商品的位置,或者鼠标移动到商品,定位代码的位置。
从网页数据中,抓取到 class 为 gl-item 的列表,拿到里面的链接、价格、标题和商品id,并以json的格式存放数据,
Python3的代码实现:
import urllib import json from urllib import parse,request from bs4 import BeautifulSoup # 根据页数和keywords采集内容 def get_content_from_keyword(keyword,page=1): # keyword_encode = parse.quote(keyword) # unquote 解码 # url = "https://search.jd.com/s_new.php?keyword=%s&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%s&page=%d&s=51&click=0"%(keyword_encode,keyword_encode,page) # r = request.urlopen(url) params = {'keyword':keyword,'page':page,'enc':'utf-8','area':1,'wq':keyword} data = parse.urlencode(params) opener = request.urlopen("https://search.jd.com/Search?"+data) content = opener.read() opener.close() return content # .decode('utf-8') # 分析数据,生成字典 res if __name__ == '__main__': keyword = '裤子' content = get_content_from_keyword(keyword,3) soup = BeautifulSoup(content,"html.parser") goods_info = soup.select(".gl-item") res = [] for good_info in goods_info: data = {} good_info_dict = good_info.select(".p-name.p-name-type-2 a")[0].attrs data['data_sku'] = good_info.attrs['data-sku'] data['title'] = good_info_dict['title'] data['href'] = good_info_dict['href'] data['price'] = good_info.select('.p-price')[0].text.strip() res.append(data) print("\n\n\n商品信息:\n\n\n",goods_info,"\n\n\n格式化数据:",json.dumps(res,sort_keys=True, indent=2))
抓取结果为:
如果我们想获得页面的请求网址,点击“Network”一栏,如下图:
从上图中,可以清楚地查看到请求的URL和请求的方式(GET/POST),其中Status为200的表示请求成功,Status为304的表示有缓存,不需要重新发送所请求的资源。