使用selenium+BeautifulSoup 抓取京东商城手机信息
1.准备工作:
- chromedriver 传送门:国内:http://npm.taobao.org/mirrors/chromedriver/ vpn:
- selenium
- 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 抓取京东商城手机信息的更多相关文章
- asp.net mvc 抓取京东商城分类
555 asp.net mvc 抓取京东商城分类 URL:http://www.jd.com/allSort.aspx 效果: //后台代码 public ActionResult Get ...
- 如何利用BeautifulSoup选择器抓取京东网商品信息
昨天小编利用Python正则表达式爬取了京东网商品信息,看过代码的小伙伴们基本上都坐不住了,辣么多的规则和辣么长的代码,悲伤辣么大,实在是受不鸟了.不过小伙伴们不用担心,今天小编利用美丽的汤来为大家演 ...
- 如何利用Xpath抓取京东网商品信息
前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~ HTML文件其实就是由一组尖括号构成的 ...
- 如何利用CSS选择器抓取京东网商品信息
前几天小编分别利用Python正则表达式.BeautifulSoup.Xpath分别爬取了京东网商品信息,今天小编利用CSS选择器来为大家展示一下如何实现京东商品信息的精准匹配~~ CSS选择器 目前 ...
- Scrapy实战篇(四)爬取京东商城文胸信息
创建scrapy项目 scrapy startproject jingdong 填充 item.py文件 在这里定义想要存储的字段信息 import scrapy class JingdongItem ...
- Scrapy实战篇(五)爬取京东商城文胸信息
创建scrapy项目 scrapy startproject jingdong 填充 item.py文件 在这里定义想要存储的字段信息 import scrapy class JingdongItem ...
- php+phpquery简易爬虫抓取京东商品分类
这是一个简单的php加phpquery实现抓取京东商品分类页内容的简易爬虫.phpquery可以非常简单地帮助你抽取想要的html内容,phpquery和jquery非常类似,可以说是几乎一样:如果你 ...
- Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据
本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...
- Python脚本抓取京东手机的配置信息
以下代码是使用python抓取京东小米8手机的配置信息 首先找到小米8商品的链接:https://item.jd.com/7437788.html 然后找到其配置信息的标签,我们找到其配置信息的标签为 ...
随机推荐
- Bootstrap 学习笔记13 附加导航插件
附加导航代码: <style> a:focus { outline: none; } .nav-pills { width: 150px; } .nav-pills.affix { top ...
- Vue CLI UI:Vue开发者必不可少的工具
突然发现一个Vue cli 比较好用的工具,一个可视化图形界面方便你去创建.更新和管理Vue项目.这里分享2个作者写得比较好的文章 https://codeseeding.com/portal.php ...
- 高德地图POI采集(URL-API)
新手从零学起,成功跑通,记一下,技术大神们多多指点. ———————————————— 1-概述 POI:兴趣点.对于百度.高德等电子地图来说,一个POI是地图上的一个店铺/商场/小区等等. 这次要解 ...
- no suitable HttpMessageConverter found for response type
在使用 RestTemplate 或者 Spring Cloud 的时候,经常会出现这个错误. 基本上出现的场景都是,我们要json,结果来了个 text/html. 两个原因: 第一个就是:服务器返 ...
- PHP开发环境搭建及开发工具
PHP服务器组件非常多有WampServer.XAMPP.AppServ.phpStudy.phpnow等. 菜鸟教程推荐: WampServer,这也是目前window平台上使用最广泛的,操作也非常 ...
- Android 虚线实现绘制 - DashPathEffect
前言: 通过view绘制虚实线,采用Android自带API--DashPathEffect.具体使用请参考更多的链接,这里只是讲解. 构造函数 DashPathEffect 的构造函数有两个参数: ...
- MySQL--07 explain用法
目录 MySQL explain用法 一.explain命令应用 二. Extra(扩展) 三.建立索引的原则(规范) 总结: MySQL explain用法 一.explain命令应用 查询数据的方 ...
- Redis和Ehcached的区别
Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...
- Class.forName的作用
在java语言中,任何类只有被装载到JVM上才能运行.Class.forName()方法的作用就是把类加载到JVM中,它会返回一个与带有给定字符串明的类或者接口相关联的Class对象,并且JVM会加载 ...
- hdu1214 圆桌会议
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1214 HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问 ...