失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python抓取京东的商品信息

python抓取京东的商品信息

时间:2022-06-11 15:46:28

相关推荐

python抓取京东的商品信息

一、需要具备的技能以及开发环境:

1. 安装python开发环境

2. requests库 BeautifulSoup库

3. 具备python一定基础

二、分析JD搜索商品的URL参数

1. 经过分析可以知道keywork为搜索关键字

2. page参数为筛选商品的页下标,每页30条数据

3. ev参数为筛选商品的价格参数

三、接着 我们分析一下 URL返回来的数据 定位到我们需要的数据

1. 我们发现商品的数据是访问url直接返回来的 所以我们需要分析下商品所在的标签跟每个商品信息对应的标签

2. 发现所有的商品都放在 ul.class = gl-warp这个标签下,ok我们只需分析处理li 然后遍历ul逐个获取即可

四、那么开始coding

1.首先封装一个商品类

class jd_product:def __init__(self):#self.img_path = None #商品图片本地路径self.img_url = None #商品图片urlself.price = None #商品价格self.keyword = [] #商品关键字self.num_of_comment = None #商品评论数self.seller_name = None #卖家名称self.seller_url = None #卖家店铺URLself.tags = [] #商品标签def __repr__(self):return self.__str__()def __str__(self):return '''价格:{}关键字:{}商品标签:{}卖家:{}评论数:{}'''.format(self.price, self.keyword, self.tags, self.seller_name, self.num_of_comment)

2. 开始用request获取到页面数据,重要一点User-Agent这些关键的参数还是要填充一下,以防被封IP(之前抓58工作岗位的时候没在意这些细节就被封了 = =)

from bs4 import BeautifulSoupimport urllibkeyword = '男衣服' #你可以使用 input输入关键字url = '/Search?keyword=%s&page=1' % (urllib.quote(keyword))host = ''headers = {"Host": '',"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:77.0) Gecko/0101 Firefox/77.0","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2","Accept-Encoding": "gzip, deflate","Connection": "keep-alive","Referer": url,"Upgrade-Insecure-Requests": "1"}response = requests.get(url, headers=headers)bs=BeautifulSoup(response.content)ul = find(bs, 'ul', {'class':'gl-warp'})jdps = []for i in ul.children:if not isinstance(i, element.Tag):continue #过滤掉 换行\njdp = jd_product()dimg = find(i, 'div', {'class':'p-img'})if dimg:jdp.img_url = find(dimg, 'img')['src']dprice = find(i, 'div', {'class':'p-price'})if dprice:jdp.price = find(dprice, 'i').stringpname = find(i, 'div', {'class':'p-name'})if pname:for j in find(pname, 'em').stripped_strings:jdp.keyword.append(j)pshop = find(i, 'div', {'class':'p-shop'})if pshop:shop = find(pshop, 'a', {})if shop:jdp.seller_name = shop.string jdp.seller_url = host + shop['href']pcommit = find(i, 'div', {'class':'p-commit'})if pcommit:for j in pcommit.stripped_strings:jdp.num_of_comment += jpicons = find(i, 'div', {'class':'p-icons'})if picons:for j in picons.stripped_strings:jdp.tags.append(j)jdps.append(jdp)print(jdps)

结果看图:

评论数 跟 运费险标签是动态加上去 就不去分析了

ps: 同样的代码在本地运行可以抓到数据 在我的阿里云环境上跑 竟然返回跳转登录界面

用curl验证一下:

猜想是不是JD粗暴的把阿里云服务器的IP给过滤了= =!!

如果觉得《python抓取京东的商品信息》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。