更:Selenium特征过多(language/UserAgent/navigator/en-US/plugins),以Selenium打开的浏览器处于自测模式,很容易被检测出来,解决方法可选:

  1. 用mitmproxy拦截请求,在请求间修改框架特征。
  2. 手动修改自动化框架特征。
  3. 不改特征的话,用pyppeteer修改js代码中特征检测逻辑。
  4. 用其它webdriver。

做爬虫two years,爬过网站数百上千,简单点的用lxml,xpath,css,re,解析源码、稍复杂点的数据用AJAX加载的、js加载的、源码数据加密的、再复杂限制cookies带cookie,封IP的上代理IP,出验证码的破解验证码,更复杂的携带参数加密的,略简单的对加密方式用python模拟解密,困难的用PyV8等方法执行加密js文件,各式各样反反爬手段

这场恩恩怨怨了无尽头,对于异步加载数据的情况,可以抓包,也可以用Selenium + PhantomJS模拟浏览器,Selenium是一个用于Web应用程序测试的工具,它直接运行在浏览器中,就像真实的用户在操作一样。由于这个性质,Selenium也是一个强大的网络数据采集工具,可以获取异步加载技术的网页。

安装方法请点击

放一个爬淘宝的例子感受一下

#encoding: utf-8
'''
使用selenium + PhantomJS 爬淘宝“男士手表”前100页,三四千个item
存入MongoDB
用到selenium:点击,清空,输入
'''
from selenium import webdriver
from pymongo import MongoClient
from lxml import etree # 实例化浏览器
driver = webdriver.PhantomJS()
# 窗口最大化
driver.maximize_window() # 连接MongoDB数据库
client = MongoClient('localhost',27017)
taobao = client['test']['taobao'] def scrapy_item(url, page):
'''采集并写入MongoDB'''
# 打开商品页
driver.get(url)
# 智能等待10s
driver.implicitly_wait(10)
sel = etree.HTML(driver.page_source)
divs = sel.xpath('//div[@class="ctx-box J_MouseEneterLeave J_IconMoreNew"]')
for x in divs:
d = {}
d["price"] = x.xpath('div[1]/div[1]/strong/text()')[0]
d["counts"] = x.xpath('div[1]/div[2]/text()')[0]
d["description"] = x.xpath('string(div[2]/a)').strip()
d["shop"] = x.xpath('div[3]/div[1]/a/span[2]/text()')[0]
# item写入MongoDB
taobao.insert_one(d)
print(d)
if page < 100:
# 少于100页,继续下一页
page += 1
# 传入参数是:当前页面URL,下页页码
nextpage(driver.current_url, page) def nextpage(url, page):
'''获得下一页连接并采集'''
# 打开刚采集完毕的页面
driver.get(url)
# 智能等待10s
driver.implicitly_wait(10)
# 点击下一页
driver.find_element_by_xpath('//a[@trace="srp_bottom_pagedown"]').click()
driver.implicitly_wait(5)
driver.get(driver.current_url)
driver.implicitly_wait(10)
# 得到下一页URL,继续采集
scrapy_item(driver.current_url, page) if __name__ == '__main__':
# 打开淘宝首页
driver.get('https://www.taobao.com/')
# 智能等待10s
driver.implicitly_wait(10)
# 找到搜索框,清空搜索框内容
driver.find_element_by_id('q').clear()
# 填入搜索条件
driver.find_element_by_id('q').send_keys('男士手表')
# 点击“搜索”
driver.find_element_by_class_name('btn-search').click()
# 搜索完毕,到达商品页面;拿着商品页面URL开始采集,页码初始化为1
scrapy_item(driver.current_url, 1)
使用前第一步先实例化浏览器,这里用PhantomJs,它是一种“无头”浏览器,开销小,速度快。另外还有Chrome,Firefox,用的比较少
driver = webdriver.PhantomJS()
 
第二步发请求,get()后的driver.page_source含有异步加载信息
driver.get(url)

第三步,打开一个网页肯定需要时间,webdriver有implicitly_wait(time)智能等待一段时间,超过time不等了,没到time但加载好了,也就不等了
driver.implicitly_wait(10)
第四步,锁定数据位置,有通过Id的,Xpath的,Css的,类名Class_name的,标签名tag_name的,等。
 
第五步,有时异步数据是基于事件驱动的,例如当鼠标下拉到页面上某一位置时才加载数据,当点击某一处才加载数据。两种办法,一把鼠标移动到某个位置点击触发事件,二把鼠标移动到页面最下端触发事件后,再解析源码;知乎解答

用Chrome()方法模拟浏览器

打开出现data;不跳转网页的,需下载chrome浏览器驱动   下载地址  或更换Chrome版本,将下载好的chromedriver.exe 放在chrome安装目录下,并设置chrome路径到path环境变量中

使用示例:

# coding = utf-8
from selenium import webdriver driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.close()

爬虫:Selenium + PhantomJS的更多相关文章

  1. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  2. 爬虫 selenium + phantomjs / chrome

    selenium 模块 Web自动化测试工具, 可运行在浏览器,根据指定命令操作浏览器, 必须与第三方浏览器结合使用 安装 sudo pip3 install selenium phantomjs 浏 ...

  3. [转]爬虫 selenium + phantomjs / chrome

    目录 selenium 模块 安装 phantomjs 浏览器 安装 chromedriver 接口 安装 对比两个接口 整合使用 基本实例 常用属性方法 定位节点 节点操作 其他操作 实例解析 - ...

  4. [Python爬虫] Selenium +phantomjs 模拟下拉滚动条

    在爬虫中,有时会遇到这种情况,数据的展示是不是一页一页的,而是通过不断的下拉滚动条来加载数据.例如一点咨询(http://www.yidianzixun.com/)和微博(在未登录的状态下:http: ...

  5. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  6. Selenium + PhantomJS + python 简单实现爬虫的功能

    Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDrive ...

  7. 学习用java基于webMagic+selenium+phantomjs实现爬虫Demo爬取淘宝搜索页面

    由于业务需要,老大要我研究一下爬虫. 团队的技术栈以java为主,并且我的主语言是Java,研究时间不到一周.基于以上原因固放弃python,选择java为语言来进行开发.等之后有时间再尝试pytho ...

  8. 使用scrapy爬虫,爬取今日头条搜索吉林疫苗新闻(scrapy+selenium+PhantomJS)

    这一阵子吉林疫苗案,备受大家关注,索性使用爬虫来爬取今日头条搜索吉林疫苗的新闻 依然使用三件套(scrapy+selenium+PhantomJS)来爬取新闻 以下是搜索页面,得到吉林疫苗的搜索信息, ...

  9. [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息

    本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...

  10. 爬虫之 图片懒加载, selenium , phantomJs, 谷歌无头浏览器

    一.图片懒加载 懒加载 :    JS 代码  是页面自然滚动    window.scrollTo(0,document.body.scrollHeight)   (重点) bro.execute_ ...

随机推荐

  1. ACMer之歌

    <<死了都要编>> 死了都要编 不动态规划不痛快 算法多深只有这样 才足够表白 死了都要编 不A星算法不痛快 宇宙毁灭星还在 把每天当成是比赛来编程 一分一秒都编到汗水掉下来 ...

  2. python基础--函数的命名空间and作用域

    函数对象:函数是第一类对象,函数名指向的值是可以被当作参数进行传递的 1.函数名可以被传递 2.函数名可以被当作参数传递给其它函数 3.函数名可以被当作函数的返回值 4.函数名可以被当作容器类型的参数 ...

  3. 2019-3-1-安装-Sureface-Hub-系统-Windows-10-team-PPIPro-系统

    title author date CreateTime categories 安装 Sureface Hub 系统 Windows 10 team PPIPro 系统 lindexi 2019-03 ...

  4. 【NOJ2024】入栈序列和出栈序列

    入栈序列和出栈序列 时间限制(普通/Java):1000MS/3000MS         运行内存限制:65536KByte 总提交:293          测试通过:68 比赛描述 给出入栈序列 ...

  5. ssdb常用知识点

    ssdb备份与恢复 http://ssdb.io/docs/zh_cn/backup.html ssdb注意事项 建议将logger.level设置为 debug 级别. 配置文件 deny,allo ...

  6. 一款你不容错过的Laravel后台管理扩展包 —— Voyager – Laravel学院

    1.简介 Voyager是一个你不容错过的Laravel后台管理扩展包,提供了CRUD操作.媒体管理.菜单构建.数据管理等操作. 官网:https://the-control-group.github ...

  7. BootStrap 栅格化换行问题

    bootstrap 3的栅格系统有时会出现错位情况,原因是上一行的元素高度不一,导致元素float错误. 解决方法 使用栅格系统的时候,应该在每一行都使用row单独包裹起来,不要直接在一行中连续加入c ...

  8. leetcode 31-40 easy

    38.Count and Say The count-and-say sequence is the sequence of integers with the first five terms as ...

  9. 使用新版本5+SDK创建最简Android原生工程(Android studio)http://ask.dcloud.net.cn/article/13232

    1 使用Android Studio创建一个工程 2 删除原生工程中Java目录下系统默认创建的源代码 3 复制SDK->libs->lib.5plus.base-release.aar文 ...

  10. VUE ECharts人际关系图

    1. 概述 1.1 说明 项目中需要对某个人的人际关系进行展示,故使用echarts中的关系图进行处理此需求. 2. 代码 2.1 代码示例 <template> <div clas ...