1. selenium基础
selenium部分可以去看我写的selenium基础部分,由于链接太多了这里就不发出来了。
代理ip:
有时候频繁爬取一些网页。服务器发现你是爬虫后会封掉你的ip地址。这时候我们可以更改代理ip。更改代理ip不同的浏览器有不同的实现方式。这里使用我最常用的Chrome浏览器为例。
- from selenium import webdriver
- chromeOptions = webdriver.ChromeOptions()
- # 设置代理
- chromeOptions.add_argument("--proxy-server=http://202.20.16.82:10152")
- # 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152
- driver = webdriver.Chrome(chrome_options = chromeOptions)
- # 查看本机ip,查看代理是否起作用
- driver.get("http://httpbin.org/ip")
- print(driver.page_source)
- # 退出,清除浏览器缓存
- driver.quit()
注意事项:
第一,选择稳定的固定的代理IP。不要选择动态代理IP。我们常用的爬虫IP代理通常都是具有高度保密性质的高匿名动态IP,是通过拨号动态产生的,时效性非常的短,一般都是在3分钟左右。
第二,选择速度较快的代理IP。因为selenium爬虫采用的是浏览器渲染技术,这种浏览器渲染技术速度就本身就很慢。如果选择的代理IP速度较慢,爬取的时间就会进一步增加。
第三,要有足够大的电脑内存。因为chrome占内存较大,在并发度很高的情况下,容易造成浏览器崩溃,也就是程序崩溃。
第四,在程序结束时,调用driver.quit( )清除浏览器缓存。
2. selenium爬虫实例
选案例真的给我整吐了,开始想弄最常用的淘宝,结果一点搜索就要登录,然后就是天猫,点击下一页就需要登录,搞得我就爬了第一页。最后还是京东好,什么都可以。
2.1 初步分析
像京东、淘宝、天猫这些网站都是动态加载,刚打开只会加载几十条数据,当滑动条到达一定位置的时候,才会继续加载。这时候我们可以通过selenium模拟浏览器下拉网页的过程,获取网站全部商品的信息。
- browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
2.2 模拟翻页
在前面,我们如果要爬取查询的每一页的内容,我们只能分析url,找规律,才能跳转到下一页,并获取数据。
现在我们就可以使用xpath定位+selenium点击,来模拟浏览器的翻页行为了。
下拉网页至底部可以发现有一个下一页的按钮,我们只需获取并点击该元素即可实现翻页。
- browser.find_element_by_xpath('//a[@class="pn-next" and @onclick]').click()
2.3 获取数据
接下来,我们需要解析每一个网页来获取我们需要的数据,具体包括(可以使用selenium选择元素):
商品 ID:browser.find_elements_by_xpath('//li[@data-sku]'),用于构造链接地址
商品价格:browser.find_elements_by_xpath('//div[@class="gl-i-wrap"]/div[2]/strong/i')
商品名称:browser.find_elements_by_xpath('//div[@class="gl-i-wrap"]/div[3]/a/em')
评论人数:browser.find_elements_by_xpath('//div[@class="gl-i-wrap"]/div[4]/strong')