基于selenium爬取京东
爬取iphone
注意:browser对象会发生变化,当对当前网页做任意操作时
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# if __name__ == '__main__': browser = webdriver.Chrome()
browser.get('https://www.jd.com')
# 搜索iphone
_input = browser.find_element_by_id('key')
_input.send_keys('iphone')
_input.send_keys(Keys.ENTER)
time.sleep(5)
# 按销量排序
sales = browser.find_element_by_xpath('//div[@class="f-sort"]/a[2]')
sales.click() has_next = True
while has_next:
# 获取当前的页码
time.sleep(5)
cur_page = browser.find_element_by_xpath('//div[@id="J_bottomPage"]/span[@class="p-skip"]/input').get_attribute('value')
print('------------------------- 当前页码 {} -------------------------'.format(cur_page)) # 加载全部数据,数据随着滚动条的下来而加载
# good_list = browser.find_element_by_id('J_goodsList')
# y = good_list.rect['y'] + good_list.rect['height']
next_page = browser.find_element_by_class_name('pn-next')
y = next_page.location['y']
browser.execute_script('window.scrollTo(0, {})'.format(y))
time.sleep(3)
# 获取当前页面所有商品列表
p_list = browser.find_elements_by_class_name('gl-item')
for p in p_list:
production = {}
sku = p.get_attribute('data-sku')
production['price'] = p.find_element_by_css_selector('strong.J_{}'.format(sku)).text
production['name'] = p.find_element_by_css_selector('div.p-name>a>em').text
production['comment'] = p.find_element_by_id('J_comment_{}'.format(sku)).text
production['shop'] = p.find_element_by_css_selector('div.p-shop>span>a').get_attribute('title')
print(production) # 下一页
cur_next_page = browser.find_element_by_class_name('pn-next')
# 判断是否是最后一页
if 'disabled' in cur_next_page.get_attribute('class'):
has_next = False
else:
cur_next_page.click() browser.quit()
优化
import time
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# if __name__ == '__main__':
keyword = 'iphone'
if len(sys.argv) > 1:
keyword = sys.argv[1]
browser = webdriver.Chrome()
browser.get('https://www.jd.com')
# 搜索iphone
_input = browser.find_element_by_id('key')
_input.send_keys(keyword)
_input.send_keys(Keys.ENTER)
time.sleep(5)
# 按销量排序
sales = browser.find_element_by_xpath('//div[@class="f-sort"]/a[2]')
sales.click() has_next = True
while has_next:
# 获取当前的页码
time.sleep(5)
cur_page = browser.find_element_by_xpath('//div[@id="J_bottomPage"]/span[@class="p-skip"]/input').get_attribute('value')
print('------------------------- 当前页码 {} -------------------------'.format(cur_page)) # 加载全部数据,数据随着滚动条的下来而加载
# good_list = browser.find_element_by_id('J_goodsList')
# y = good_list.rect['y'] + good_list.rect['height']
next_page = browser.find_element_by_class_name('pn-next')
y = next_page.location['y']
browser.execute_script('window.scrollTo(0, {})'.format(y))
time.sleep(3)
# 获取当前页面所有商品列表
p_list = browser.find_elements_by_class_name('gl-item')
for p in p_list:
production = {}
sku = p.get_attribute('data-sku')
production['price'] = p.find_element_by_css_selector('strong.J_{}'.format(sku)).text
production['name'] = p.find_element_by_css_selector('div.p-name>a>em').text
production['comment'] = p.find_element_by_id('J_comment_{}'.format(sku)).text
production['shop'] = p.find_element_by_css_selector('div.p-shop>span>a').get_attribute('title')
print(production) # 下一页
cur_next_page = browser.find_element_by_class_name('pn-next')
# 判断是否是最后一页
if 'disabled' in cur_next_page.get_attribute('class'):
has_next = False
else:
cur_next_page.click() browser.quit()
通过sys使
python jd.py mac
补充
sys.argv[0] 是脚本的名称
sys.argv[1] 是参数
基于selenium爬取京东的更多相关文章
- selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装
今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...
- 利用selenium爬取京东商品信息存放到mongodb
利用selenium爬取京东商城的商品信息思路: 1.首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构 2.根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归.等待 ...
- Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据
本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...
- 爬虫系列(十三) 用selenium爬取京东商品
这篇文章,我们将通过 selenium 模拟用户使用浏览器的行为,爬取京东商品信息,还是先放上最终的效果图: 1.网页分析 (1)初步分析 原本博主打算写一个能够爬取所有商品信息的爬虫,可是在分析过程 ...
- Scrapy实战篇(七)之Scrapy配合Selenium爬取京东商城信息(下)
之前我们使用了selenium加Firefox作为下载中间件来实现爬取京东的商品信息.但是在大规模的爬取的时候,Firefox消耗资源比较多,因此我们希望换一种资源消耗更小的方法来爬取相关的信息. 下 ...
- 使用Selenium爬取京东电商数据(以手机商品为例)
进入京东(https://www.jd.com)后,我如果搜索特定的手机产品,如oppo find x2,会先出现如下的商品列表页: 如果点击进入其中一个商品会进入到如下图所示的商品详情页,可以看到用 ...
- Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)
在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...
- 爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据
1. Scrapy对接Selenium Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态谊染的页面.在前面的博客中抓取Ja ...
- python爬虫——用selenium爬取京东商品信息
1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...
随机推荐
- Junit 测试集(打包测试)实例
测试集,直译过来的意思就是把测试集合起来,再详细一些就是把多个单元测试集合起来 .单元测试可以理解为:单个接口 或者单个类/方法 的测试 项目背景:测试基于spring开发的项目代码 实例模板:pac ...
- linux kdb 内核调试器
许多读者可能奇怪为什么内核没有建立更多高级的调试特性在里面.答案, 非常简单, 是 Linus 不相信交互式的调试器. 他担心它们会导致不好的修改, 这些修改给问题打了补丁 而不是找到问题的真正原因. ...
- 性能测试基础-开门篇3(LR常用函数介绍)
LR常用的函数,协议不一样函数会不一样,这里简单的介绍下HTTP\WEBSERVICE\SOCKET协议常用函数: HTTP: web_set_max_html_param_len("102 ...
- 闲来无事写一个jquery计算器,没有进行封装......
<!doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...
- vue-learning:13 - js - vue作用域概念:全局和局部
目录 全局作用域:Vue对象 全局api 局部作用域: 实例对象vm 实例api 组件component 组件配置选项 在引入Vue文件时,就相当于拥有了一个全局Vue对象. 在var vm = ne ...
- HDU - 4587 TWO NODES (图的割点)
Suppose that G is an undirected graph, and the value of stab is defined as follows: Among the expres ...
- Linux网络IO模型
同步和异步,阻塞和非阻塞 同步和异步 关注的是结果消息的通信机制 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函 ...
- 小心Powershell的位数
我们都知道64位的 Windows 中有两个Powershell,32位的 Windows Powershell(x86)和64位的 Windows Powershell.(当然,32位的Window ...
- linux下的一些命令的笔记
1.php的扩展是在 php/include/php/ext/下 2.在vi下查找关键字 在vi的命令模式下, 输入/,然后再输入关键字,回车就可以进行查找,按n则会跳到下一个关键字在的位置 3.ph ...
- 微信支付-小程序H5 公众号 Payment SDK
前言 今天是2020年一天,去年最后一个月开发了订单和支付系统,尤其在支付系统和微信对接的时候遇到了很多坑,这里给大家总结下,以免大家遇到相同的问题还浪费大量时间 微信支付前期准备 微信商户号,需要商 ...