1.准备工作:

  1. chromedriver  传送门:国内:http://npm.taobao.org/mirrors/chromedriver/   vpn:
  2. selenium
  3. BeautifulSoup4(美味汤)
pip3 install selenium              
pip3 install BeautifulSoup4

  chromedriver 的安装请自行百度。我们直奔主题。

起飞前请确保准备工作以就绪...

2.分析网页:

 目标网址:https://www.jd.com/

 

所有item均保存在class="gl-item"里面

需求:

  • 使用selenium 驱动浏览器自动侦测到input输入框,输入框中输入“手机”,点击搜索按钮.
  • 使用seleinum抓取发挥页面的总页码,并模拟手动翻页
  • 使用BeautifulSoup分析页面,抓取手机信息

从入口首页进入查询状态

 # 定义入口查询界面
def search():
browser.get('https://www.jd.com/')
try:
# 查找搜索框及搜索按钮,输入信息并点击按钮
input = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#key")))
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search > div > div.form > button")))
input[0].send_keys('手机')
submit.click()
# 获取总页数
page = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
return page[0].text
# 如果异常,递归调用本函数
except TimeoutException:
search()

查询结束后模拟翻页

 # 翻页
def next_page(page_number):
try:
# 滑动到网页底部,加载出所有商品信息
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
html = browser.page_source
# 当网页到达100页时,下一页按钮失效,所以选择结束程序
while page_number == 101:
exit()
# 查找下一页按钮,并点击按钮
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_bottomPage > span.p-num > a.pn-next > em')))
button.click()
# 判断是否加载到本页最后一款产品Item(每页显示60条商品信息)
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#J_goodsList > ul > li:nth-child(60)")))
# 判断翻页成功
wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#J_bottomPage > span.p-num > a.curr"), str(page_number)))
return html
except TimeoutException:
return next_page(page_number)

解析页面上的a标签

# 解析每一页面上的a链接
def parse_html(html):
"""
解析商品列表网页,获取商品的详情页
""" soup = BeautifulSoup(html, 'html.parser')
items = soup.select('.gl-item')
for item in items:
a = item.select('.p-name.p-name-type-2 a')
link = str(a[0].attrs['href'])
if 'https:' in link:
continue
else:
link = "https:"+link
yield link

根据url 截取商品id 获取价格信息

# 获取手机价格,由于价格信息是请求另外一个地址https://p.3.cn/prices/mgets?skuIds=J_+product_id
def get_price(product_id):
url = 'https://p.3.cn/prices/mgets?skuIds=J_' + product_id
response = requests.get(url,heeders)
result = ujson.loads(response.text)
return result

进入item商品详情页

# 进入详情页
def detail_page(link):
"""
进入item详情页
:param link: item link
:return: html
"""
browser.get(link)
try:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
html = browser.page_source
return html
except TimeoutException:
detail_page(link)
 # 获取详情页的手机信息
def get_detail(html,result):
"""
获取详情页的数据
:param html:
:return:
"""
dic ={}
soup = BeautifulSoup(html, 'html.parser')
item_list = soup.find_all('div', class_='Ptable-item')
for item in item_list:
contents1 = item.findAll('dt')
contents2 = item.findAll('dd')
for i in range(len(contents1)):
dic[contents1[i].string] = contents2[i].string dic['price_jd '] = result[0]['p']
dic['price_mk '] = result[0]['m']
print(dic)

滴滴滴.. 基本上的思路就酱紫咯.. 传送门依旧打开直github: https://github.com/shinefairy/spider/

end~

使用selenium+BeautifulSoup 抓取京东商城手机信息的更多相关文章

  1. asp.net mvc 抓取京东商城分类

    555 asp.net mvc 抓取京东商城分类   URL:http://www.jd.com/allSort.aspx   效果:   //后台代码 public ActionResult Get ...

  2. 如何利用BeautifulSoup选择器抓取京东网商品信息

    昨天小编利用Python正则表达式爬取了京东网商品信息,看过代码的小伙伴们基本上都坐不住了,辣么多的规则和辣么长的代码,悲伤辣么大,实在是受不鸟了.不过小伙伴们不用担心,今天小编利用美丽的汤来为大家演 ...

  3. 如何利用Xpath抓取京东网商品信息

    前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~ HTML文件其实就是由一组尖括号构成的 ...

  4. 如何利用CSS选择器抓取京东网商品信息

    前几天小编分别利用Python正则表达式.BeautifulSoup.Xpath分别爬取了京东网商品信息,今天小编利用CSS选择器来为大家展示一下如何实现京东商品信息的精准匹配~~ CSS选择器 目前 ...

  5. Scrapy实战篇(四)爬取京东商城文胸信息

    创建scrapy项目 scrapy startproject jingdong 填充 item.py文件 在这里定义想要存储的字段信息 import scrapy class JingdongItem ...

  6. Scrapy实战篇(五)爬取京东商城文胸信息

    创建scrapy项目 scrapy startproject jingdong 填充 item.py文件 在这里定义想要存储的字段信息 import scrapy class JingdongItem ...

  7. php+phpquery简易爬虫抓取京东商品分类

    这是一个简单的php加phpquery实现抓取京东商品分类页内容的简易爬虫.phpquery可以非常简单地帮助你抽取想要的html内容,phpquery和jquery非常类似,可以说是几乎一样:如果你 ...

  8. Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据

    本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...

  9. Python脚本抓取京东手机的配置信息

    以下代码是使用python抓取京东小米8手机的配置信息 首先找到小米8商品的链接:https://item.jd.com/7437788.html 然后找到其配置信息的标签,我们找到其配置信息的标签为 ...

随机推荐

  1. Bootstrap 学习笔记13 附加导航插件

    附加导航代码: <style> a:focus { outline: none; } .nav-pills { width: 150px; } .nav-pills.affix { top ...

  2. Vue CLI UI:Vue开发者必不可少的工具

    突然发现一个Vue cli 比较好用的工具,一个可视化图形界面方便你去创建.更新和管理Vue项目.这里分享2个作者写得比较好的文章 https://codeseeding.com/portal.php ...

  3. 高德地图POI采集(URL-API)

    新手从零学起,成功跑通,记一下,技术大神们多多指点. ———————————————— 1-概述 POI:兴趣点.对于百度.高德等电子地图来说,一个POI是地图上的一个店铺/商场/小区等等. 这次要解 ...

  4. no suitable HttpMessageConverter found for response type

    在使用 RestTemplate 或者 Spring Cloud 的时候,经常会出现这个错误. 基本上出现的场景都是,我们要json,结果来了个 text/html. 两个原因: 第一个就是:服务器返 ...

  5. PHP开发环境搭建及开发工具

    PHP服务器组件非常多有WampServer.XAMPP.AppServ.phpStudy.phpnow等. 菜鸟教程推荐: WampServer,这也是目前window平台上使用最广泛的,操作也非常 ...

  6. Android 虚线实现绘制 - DashPathEffect

    前言: 通过view绘制虚实线,采用Android自带API--DashPathEffect.具体使用请参考更多的链接,这里只是讲解. 构造函数 DashPathEffect 的构造函数有两个参数: ...

  7. MySQL--07 explain用法

    目录 MySQL explain用法 一.explain命令应用 二. Extra(扩展) 三.建立索引的原则(规范) 总结: MySQL explain用法 一.explain命令应用 查询数据的方 ...

  8. Redis和Ehcached的区别

    Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...

  9. Class.forName的作用

    在java语言中,任何类只有被装载到JVM上才能运行.Class.forName()方法的作用就是把类加载到JVM中,它会返回一个与带有给定字符串明的类或者接口相关联的Class对象,并且JVM会加载 ...

  10. hdu1214 圆桌会议

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1214 HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问 ...