selenium使用需要先安装chrome和chromedriver.exe
见:linux安装google chrome 和 selenium webdriver你使用的是不受支持的命令行标记 这两篇文章

例1,打开百度首页

from selenium import webdriverbrowser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

例二:获取网址www.17huo.com大衣的信息

第一部分:找到有多少页商品

1.输入http://www.17huo.com/search.html?sq=2&keyword=%E5%A4%A7%E8%A1%A3
2.翻到底部,有一栏写着“共100页,每页24条”
3.对着2中的信息,右键“审查元素”
4.将对应的审查元素中的有“共100页,。。。”的代码复制(右键copy–copy selector)

import time  #用于时间计算等(可以不要)
from selenium import webdriverbrowser = webdriver.Chrome()
browser.set_page_load_timeout(30)   #A部分,等待超时时间不超过三十秒(可不要此句),超过三十就不加载browser.get('http://www.17huo.com/search.html?sq=2&keyword=%E5%A4%A7%E8%A1%A3')
page_info = browser.find_element_by_css_selector('body > div.wrap > div.pagem.product_list_pager > div')#将上面第4复制的审查元素粘贴pages = int(page_info.text.split(', ')[0].split(' ')[1])#B部分,解释见下面
print('商品有%d页'% pages)>>>商品有100页

解释

A部分:
上面等待时间超过三十秒就不加载了,如果超过三十要更新重新加载见:
https://zhidao.baidu.com/question/1737641667737447987.htmlc

B部分:
page_info得到的是浏览器寻找到的元素,即上面描述的4中的字符串的中文,即

共 100 页, 每页 24 条

现在我们要的是100页这个信息,所以用split()函数分离。
page_info.text.split(‘,’)表示从逗号分离,即分离后是

['共 100 页, 每页 24 条']

是两个索引,演示如下


当然,可以直接以空格分开而不用逗号分开那一步页可以得到“100”这个数字

第二部分:遍历商品页数

目的:遍历每一页,输出每一页有多少商品

1,点击第二页,此时可以看到最上面的网址连接后面是page=2,(当要看第三页,只要改为3即可;改为100就是最后一页)
2.点击商品图片,看到是一个列表形式(ul),所以ul下面的所有元素都是列表的元素,故只要copy ul那一行,copy selector即可

代码接上:

import time
from selenium import webdriverbrowser = webdriver.Chrome()
browser.set_page_load_timeout(120)browser.get('http://www.17huo.com/search.html?sq=2&keyword=%E5%A4%A7%E8%A1%A3')
page_info = browser.find_element_by_css_selector('body > div.wrap > div.pagem.product_list_pager > div')pages = int(page_info.text.split(', ')[0].split(' ')[1])
print('商品有%d页'% pages)
for i in range(pages):if i > 2:breakurl = 'http://www.17huo.com/?mod=search&sq=2&keyword=%E5%A4%A7%E8%A1%A3&page=' + str(i+1)browser.get(url)#由于有的页面很长,如果不拉则有些显示不出来,这样需要一个模拟滚动(此行有问题,不知道错哪儿,故注释掉)#browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(30)#等待时间#by_css_selector那儿放的是复制的ul,后面find部分放的是li标签#goods已经是一个页面中放置的所有商品的一个列表,所以可以len(goods)就是商品的数量goods =  browser.find_element_by_css_selector('body > div.wrap > div:nth-child(2) > div.p_main > ul').find_elements_by_tag_name('li')print('第%d页,有%d件商品'%((i+1),len(goods)))>>>
商品有100页
第1页,有24件商品
第2页,有24件商品
第3页,有24件商品

由于需要打开浏览器,所以使得速度很慢,可以使用无头浏览器,这样就是纯命令行操作,不用打开浏览器,速度会快一些。如果报错timeout,请将

browser.set_page_load_timeout(30)

中的时间30秒改成更多的时间,如120

第三部分:遍历商品名称和价格

目的:输出每一页中对应的商品的名称和价格

import time
from selenium import webdriverbrowser = webdriver.Chrome()
browser.set_page_load_timeout(240)browser.get('http://www.17huo.com/search.html?sq=2&keyword=%E5%A4%A7%E8%A1%A3')
page_info = browser.find_element_by_css_selector('body > div.wrap > div.pagem.product_list_pager > div')pages = int(page_info.text.split(', ')[0].split(' ')[1])
print('商品有%d页'% pages)
for i in range(pages):if i > 2:breakurl = 'http://www.17huo.com/?mod=search&sq=2&keyword=%E5%A4%A7%E8%A1%A3&page=' + str(i+1)browser.get(url)#由于有的页面很长,如果不拉则有些显示不出来,这样需要一个模拟滚动browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(120)#等待时间#by_css_selector那儿放的是复制的ul,后面find部分放的是li标签goods =  browser.find_element_by_css_selector('body > div.wrap > div:nth-child(2) > div.p_main > ul').find_elements_by_tag_name('li')print('第%d页,有%d件商品'%((i+1),len(goods)))for good in goods:#A部分title = good.find_element_by_css_selector('a:nth-child(1) > p:nth-child(2)').textprice = good.find_element_by_css_selector('div > span').textprint(title,price)

解释

A部分:

 title = good.find_element_by_css_selector('a:nth-child(1) > p:nth-child(2)').text

title后面括号放的字符串的由来:
1,鼠标放在任意页任意商品图片标题名称上,右键“审查元素”
2找到title(此时会将图片对应的名字加深)如图(同理找价格的时候先将鼠标方法价格上,再右键“审查元素”)

3,copy —- copy selector
在写入代码时,去掉了多余的部分,留出来可以识别的就可以了,因为不同商品的title代码实际上不同,列俩个如下:

body > div.wrap > div:nth-child(2) > div.p_main > ul > li:nth-child(1) > a:nth-child(1) > p:nth-child(2)
body > div.wrap > div:nth-child(2) > div.p_main > ul > li:nth-child(2) > a:nth-child(1) > p:nth-child(2)

上面两个就只差别在中间括号的1和2,表示第一件和第二件商品,由于goods列表中已经将商品分开了,所以已经会遍历每已经商品,故可以把每件商品的特别标签去掉,留后面相同的部分。

上面最后加.text是将信息写(加载)出来
结果如下:

商品有100页
第1页,有24件商品
黄格子大衣 ¥155.00
中老年妈妈冬季仿貂绒大衣连帽女 ¥350.00
中老年女装冬新款羊剪绒加厚仿皮 ¥350.00
中老年女装冬季新款羊剪绒加厚仿 ¥350.00
中老年女装冬季新款羊剪绒加厚仿 ¥300.00
中老年妈妈装冬季新款羊剪绒大衣 ¥350.00
冬季新款中年女装羊剪绒大衣妈妈 ¥350.00
妈妈装冬季仿羊剪绒大衣保暖外套 ¥350.00
中老年女装羊毛呢子外套2017 ¥180.00
新款妈妈装羊剪绒大衣冬中长款带 ¥350.00
中老年女装冬季新款羊剪绒大衣中 ¥320.00
中老年妈妈装冬季羊剪绒外套中长 ¥320.00
妈妈装羊剪绒大衣中长款冬季新款 ¥300.00
大格子复古毛呢大衣 ¥158.00

同时上面可能会出错,因为爬虫的时候审查元素会有几个元素很不正常,这时可以采用try…except…

异常处理

import time
from selenium import webdriverbrowser = webdriver.Chrome()
browser.set_page_load_timeout(240)browser.get('http://www.17huo.com/search.html?sq=2&keyword=%E5%A4%A7%E8%A1%A3')
page_info = browser.find_element_by_css_selector('body > div.wrap > div.pagem.product_list_pager > div')pages = int(page_info.text.split(', ')[0].split(' ')[1])
print('商品有%d页'% pages)
for i in range(pages):if i > 2:breakurl = 'http://www.17huo.com/?mod=search&sq=2&keyword=%E5%A4%A7%E8%A1%A3&page=' + str(i+1)browser.get(url)#由于有的页面很长,如果不拉则有些显示不出来,这样需要一个模拟滚动browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(120)#等待时间#by_css_selector那儿放的是复制的ul,后面find部分放的是li标签goods =  browser.find_element_by_css_selector('body > div.wrap > div:nth-child(2) > div.p_main > ul').find_elements_by_tag_name('li')print('第%d页,有%d件商品'%((i+1),len(goods)))for good in goods:try:title = good.find_element_by_css_selector('a:nth-child(1) > p:nth-child(2)').textprice = good.find_element_by_css_selector('div > a > span').textprint(title,price)except:print('Exception')

当然异常处理也可以选择跳过pass

最后,爬虫不是所有都可以爬的,有些爬得频繁会被封号。

python网络爬虫---selenium的使用相关推荐

  1. Python网络爬虫Selenium页面等待:强制等待、隐式等待和显式等待

    关于Python网络爬虫Selenium强制等待.隐式等待和显式等待的总结 from selenium import webdriver import time from selenium.webdr ...

  2. Python实训day08am【网络爬虫selenium、图像处理入门】

    Python实训-15天-博客汇总表 目录 1.网络爬虫-selenium(歌曲与歌词) 2.图像处理 2.1.安装库 2.2.图片处理 2.3.马赛克 2.4.副本-缩略图-粘贴-创建新图 2.5. ...

  3. Python小姿势 - # Python网络爬虫之如何通过selenium模拟浏览器登录微博

    Python网络爬虫之如何通过selenium模拟浏览器登录微博 微博登录接口很混乱,需要我们通过selenium来模拟浏览器登录. 首先我们需要安装selenium,通过pip安装: ``` pip ...

  4. 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战

    这两天博主在摸鱼时,偶然间接触到了流媒体的概念,一时间来了兴致.再加上之前博主有着七.八年的视频制作经验,深知视频素材获取的不易.因此,打算利用自己所学的python网络爬虫的知识,通过编写代码实现获 ...

  5. Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据

    Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据 不需要登陆新浪微博账户,直接运行就可以通过python爬虫爬取新浪微博用户数据.本例selenium与pyautogui ...

  6. Python网络爬虫(四):selenium+chrome爬取美女图片

    说明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因为是模拟浏览器访问,chrome需要再下载一个驱动,具体方式在我的上 ...

  7. python网络爬虫_Python网络爬虫——爬取视频网站源视频!

    原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...

  8. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  9. 精通python网络爬虫-精通Python网络爬虫 PDF 高清版

    给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫.核心技术.框架.项目实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小108.6 MB,韦玮编写 ...

最新文章

  1. 测试nginx网站代码_在40行以下代码中使用NGINX进行A / B测试
  2. 百度投资创维10亿,联手构建智能家居AI生态
  3. Linux source命令(转)
  4. Google 都在用的 6 个休息小技巧,让你工作效率翻倍
  5. PHP中的stdClass 【转】
  6. 记录一次,事务遇到消息发送,疏忽给自己挖坑
  7. 5-1 File Transfer
  8. SQL Server 2005导入导出存储过程
  9. SIGTERM等信号含义
  10. RequestsLibrary库入门介绍
  11. 读我是一只IT小小鸟有感
  12. 魏兴华_ORACLE优化器革命漫谈
  13. 看板工具 Wekan 常见问题汇总
  14. QQ另存为出现“你没有权限在此位置中保存文件,请与管理员联系以获得相应权限”
  15. 【google】解决google浏览器不弹出账号密码保存框且无法保存登录信息问题
  16. USB 调试工具(python2.7 + Tkinter + pyusb/pywinusb)
  17. xdebug(32) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
  18. 基于ssm+mysql的javaee微博博客系统,Java实现类似新浪微博网站、朋友圈分享系统
  19. 【2. Netty的入门案例】
  20. 打开邮箱发现很久以前面试的公司竟然给我再次发面试邀请

热门文章

  1. 哥调的不是车,是寂寞
  2. python正则表达式代码_python的re正则表达式实例代码
  3. android studio 顶部导航栏_5分钟学交互:手机交互组件归纳 导航篇
  4. 设备树的具体使用方法
  5. vue 心跳监控_【笔记】vue中websocket心跳机制
  6. tp5查询字段相加_tp5 sum某个字段相加得到总数的例子
  7. Insertion Loss Return Loss
  8. Java 统计字母个数
  9. 固态器件理论(9)晶闸管
  10. FPGA之道(84)功能仿真之Verilog Test Fixture