基于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 ...
随机推荐
- linux进程 阻塞和非阻塞操作
在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...
- Echarts构建图表
Echarts学习-构建图表 相信有很多的前端开发人员在开发Echarts图表的过程中都遇到对图表结构过无从下手,面对一大堆的专业词汇一脸懵逼的样子,在经过了一段时间的踩坑后,终于摸索出了一套完善的学 ...
- js中的克隆
1.如果克隆对象是基本类型,直接复制就可以 <script type="text/javascript"> var str1 = 'abc' var str2 = st ...
- Linux 内核块 urb
块 urb 被初始化非常象中断 urb. 做这个的函数是 usb_fill_bulk_urb, 它看来如此: void usb_fill_bulk_urb(struct urb *urb, struc ...
- 【18.69%】【codeforces 672C】Recycling Bottles
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 用mingw静态编译Qt4.8.2和Qt5.1.1(需要修改不少源码)
因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1.经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需. 首先,在编译之前,我需要 ...
- mapper的配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-// ...
- python中交换两个变量值的方法
a = 4b = 5 #第1种c = 0c = aa = bb = c #第2种a = a+bb = a-ba = a-b #第3种a,b = b,a print("a=%d,b=%d&qu ...
- 什么是神经网络 (Neural Network)
反向传播: 可以看作是再一次将传过来的信号传回去, 看看这个负责传递信号神经元对于”讨糖”的动作到底有没有贡献, 让它好好反思与改正, 争取下次做出更好的贡献. 生物神经网络和人工神经网络的差别: 人 ...
- VC windows 多网卡情况下 获取当前网卡ip地址
参考 代码如下 记录下以后用得到或者能帮到有需要的朋友 #include <iostream> #include <WinSock2.h> #include <Iphlp ...