爬取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爬取京东的更多相关文章

  1. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  2. 利用selenium爬取京东商品信息存放到mongodb

    利用selenium爬取京东商城的商品信息思路: 1.首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构 2.根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归.等待 ...

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

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

  4. 爬虫系列(十三) 用selenium爬取京东商品

    这篇文章,我们将通过 selenium 模拟用户使用浏览器的行为,爬取京东商品信息,还是先放上最终的效果图: 1.网页分析 (1)初步分析 原本博主打算写一个能够爬取所有商品信息的爬虫,可是在分析过程 ...

  5. Scrapy实战篇(七)之Scrapy配合Selenium爬取京东商城信息(下)

    之前我们使用了selenium加Firefox作为下载中间件来实现爬取京东的商品信息.但是在大规模的爬取的时候,Firefox消耗资源比较多,因此我们希望换一种资源消耗更小的方法来爬取相关的信息. 下 ...

  6. 使用Selenium爬取京东电商数据(以手机商品为例)

    进入京东(https://www.jd.com)后,我如果搜索特定的手机产品,如oppo find x2,会先出现如下的商品列表页: 如果点击进入其中一个商品会进入到如下图所示的商品详情页,可以看到用 ...

  7. Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)

    在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...

  8. 爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据

    1. Scrapy对接Selenium Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态谊染的页面.在前面的博客中抓取Ja ...

  9. python爬虫——用selenium爬取京东商品信息

    1.先附上效果图(我偷懒只爬了4页)  2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...

随机推荐

  1. H3C DHCP服务器基本配置示例

  2. 如何理解springMVC?

    springMVC 工作原理? 简单理解:客户端发送请求-->前端控制器接受客户端的请求DispathServelt-->找到处理器映射HandMapping-->找到处理器hand ...

  3. 【75.28%】【codeforces 764B】Decoding

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. codeforces 1217E E. Sum Queries? (线段树

    codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ...

  5. codeforces 677D(分层图dp)

    Codeforces 677D 传送门:https://codeforces.com/contest/677/problem/D 题意: 给你一个n*m的方格图,每个点有一个权值val,现在要求你从坐 ...

  6. Consul etcd ZooKeeper euerka 对比

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...

  7. Elasticsearch慢查询故障诊断

    最近在做ES搜索调优,看了一些lucene搜索的文档和代码,本文用于总结调优过程中学到的知识和自己的思考. 在抓到ES慢查询之后,会通过profile或者kibana的Search Profiler ...

  8. 【Spring Cloud 源码解读】之 【这也太神奇了,RestTemplate加上一个@LoadBalanced注解就能实现负载均衡!】

    前提概要: 前天,有个前端大佬问了我两个问题:为啥不引入Ribbon依赖就能使用Ribbon?为啥RestTemplate加上@LoadBalanced注解就能负载均衡了?我也表示很疑惑,而我自己其实 ...

  9. 【一起学源码-微服务】Nexflix Eureka 源码九:服务续约源码分析

    前言 前情回顾 上一讲 我们讲解了服务发现的相关逻辑,所谓服务发现 其实就是注册表抓取,服务实例默认每隔30s去注册中心抓取一下注册表增量数据,然后合并本地注册表数据,最后有个hash对比的操作. 本 ...

  10. SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案

    背景 之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子.方便他们写抽取的代码.今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题.想了一下,应该是写动态数据源的 ...