上一篇介绍了通过正则匹配完成的简单爬虫,这次要介绍一个自动化测试工具 -- Selenium,应用 Selenium 可以非常轻松的完成一个爬虫程序。下面我们就通过 Selenium 来爬取一下 “糗事百科” 中的段子。
一、Selenium 的安装与使用
1、安装很简单,只需要一句命令
pip install selenium
过程中可能会出现 “Read timed out.” 的错误,这时需要添加一个 timeout 参数,像这样
pip install selenium --timeout 6000
或者通过豆瓣提供的国内 pipy 镜像服务来安装
pip install selenium -i http://pypi.douban.com/simple
pip 是一个包管理工具,安装方法自行百度一下,非常简单
2、使用
我们一般通过 Chrome 浏览器来调试,使用 Selenium 之前需要先下载对应的驱动。传送门,需要科学上网。
下载完成后解压,放在 /usr/local/bin 目录下,Windows 用户自行百度一下配置方法。
sudo mv /Users/JackieQu/Downloads/chromedriver /usr/local/bin
然后运行下面的代码,若自动打开了浏览器并访问了简书主页,则说明配置成功。
from selenium import webdriver
dr = webdriver.Chrome()
dr.get('http://www.jianshu.com/')
Selenium 像 jQuery 一样,可以通过 id、class、name 等直接获取网页元素,原理应该跟正则匹配差不多(我也是猜的,毕竟没看过源码)。常用的几个方法如下:
find_element_by_id
find_element_by_class_name
find_element_by_name
find_element_by_xpath
多个元素获取则改为 elements,如:
find_elements_by_class_name
其中 by_id、by_class_name 对于一些结构比较简单网页比较适用,而对于有些网站,如 36kr、腾讯新闻等,就不太奏效了。这就要通过 xpath 来获取元素,关于 by_xpath 下篇再说。
二、分析网页代码
我们进入糗事百科,打开调试模式,可以很容易的看的该网页的代码结构。
下图即为要爬取内容的外层 <div id="content-left" class="col1">
content-left
再用鼠标选中段子内容,可以发现文章的外层 <div class="content">
content
所以我们只需要获取到 id="content-left" 的元素,再对其内部 class="content" 的元素进行遍历即可获得我们想要的段子。
三、代码与演示
# !/usr/bin/env python
# coding:utf-8
from selenium import webdriver
class Qiubai:
def __init__(self):
self.dr = webdriver.Chrome()
self.dr.get('https://www.qiushibaike.com/')
def getData(self):
content_left = self.dr.find_element_by_id('content-left')
contents = content_left.find_elements_by_class_name('content')
i = 1
for content in contents:
print(str(i) + "." + content.text + '\n')
i += 1
self.quit()
def quit(self):
self.dr.quit()
Qiubai().getData()
演示
哦了,至此爬虫完成。
要想爬取更多页的段子,自己翻页看看 url 后面拼的参数,遍历一下即可。








网友评论