python爬取京东商品信息_使用selenium爬取京东商品信息

今天我来分享一下如何使用Python的selenium库爬取京东商品信息。京东商品页面的每个商品都有商品名字,价格,店家信息,和评论数量等关于商品的信息,我要爬取的就是这些信息,通过商品名字,来获取一类商品的商品信息。

一,爬取思路分析

以爬取python书籍的商品信息为例,打开京东商城的首页,在搜索栏中输入 :python,点击搜索,有关Python的书籍就显示出来了,这时我们查看一下地址栏中的URL:

https://search.jd.com/Search?keyword=python&enc=utf-8&wq=python&pvid=1a6e8c7fb20f439dacd2dabfca18ede2

由于URL中的有些参数可以去掉,这里保留enc=utf-8这个参数,不然当关键字为中文时会出错。因此上面的URL我们可以简化成下面形式:

https://search.jd.com/Search?keyword=python&enc=utf-8

你可以把这个URL输入到地址栏中,然后你会得到和刚才相同的页面。接下来点击第2页,URL变成了:

https://search.jd.com/Search?keyword=python&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=python&page=3&s=58&click=0

简化后:

https://search.jd.com/Search?keyword=python&enc=utf-8&page=3

再看第3页:

https://search.jd.com/Search?keyword=python&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&page=5&s=101&click=0

URL简化后为:

https://search.jd.com/Search?keyword=python&enc=utf-8&page=5

由此我们可以发现URL随页数的变化规律为:

url = 'https://search.jd.com/Search?keyword=' + str(product) + "&enc=utf-8&page=" + str(page)

其中product是商品名,page = index * 2 – 1(index是页数)。下面我们来看一下商品信息在网页源代码中的位置,将鼠标置于页面商品信息位置处,然后右键-检查,你会发现商品信息在下面的标签里面:

细数li标签的个数发现只有30个,而一页有60本书的展示信息,只有一半,如果此时你使用requests库去爬取的话,只能每页获取到30个商品信息(一半)。但是如果你滑动鼠标至页面底部,此时再检查页面源代码,发现包含商品信息的li标签有60个,因此此时的网页源代码才是我们需要获取的。

二,使用selenium实现与页面之间的交互

我们要获取包含全部商品信息的网页源代码就需要和页面进行交互,即要让页面滑至底部。我们使用selenium中的driver.execute_script()方法来执行向下滑动至页面底部的js脚本。具体实现:

# 导入模块

from selenium import webdriver

driver = webdriver.Chrome()

driver.get(url)

# 执行页面向下滑至底部的动作

driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

页面滑至底部后,停顿几秒待页面加载完成!使用driver.page_source方法来返回此时页面的源代码。

# 停顿5秒等待页面加载完毕!!!(必须留有页面加载的时间,否则获得的源代码会不完整。)

time.sleep(5)

# 返回此时的网页源代码

html_sourcode = driver.page_source

三,解析页面

解析页面我们用bs4库,找到对应的的信息所在位置的标签,然后用find()方法一个一个地提取出这些信息,定义一个提取这些商品信息的函数:

# 提取商品信息

def parser(html, i, filepath):

soup = BeautifulSoup(html, 'html5lib')

# 总页数

total = eval(soup.find('span', 'p-skip').em.b.text)

# 定位到包含这些商品信息的代码

items = soup.find_all('div', 'gl-i-wrap')

for item in items:

# 商品名称

p_name = item.find('div', 'p-name').a.em.text

# 商品价格

p_price = item.find('div', 'p-price').strong.text

# 店家信息

p_shopinfo = item.find('div', re.compile('p-shop'))

if p_shopinfo.a is None:

p_shop = p_shopinfo.span.text

else:

p_shop = p_shopinfo.a.text

# 评论数量

p_comment = item.find('div', 'p-commit').strong.a.text

# 写入文件

with open(filepath, 'at', encoding="utf-8") as f:

f.write("{}.商品名称:{} 价格:{} 店家信息:{} 评论数量:{}\n".format(i, p_name, p_price, p_shop, p_comment))

# 可视化输出

print("{}.商品名称:{} 价格:{} 店家信息:{} 评论数量:{}".format(i, p_name, p_price, p_shop, p_comment))

# 统计这一页有多少商品

i += 1

return total, i

四,总结

爬取京东商品信息的关键是实现与页面之间的交互(即让页面滑动至底部),这样才能获取到包含全部60个商品信息的源代码,其他的话都是比较好处理的。

源代码地址(Github):京东商品信息爬虫源代码

我之前也写过一篇爬取京东商品图片的文章:利用python爬取京东商城商品图片,爬取思路是一致的,大家也可以参考一下!

喜欢 (10)or分享 (0)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值