Python爬虫常用工具

下面是Python爬虫常用库和常用工具的简单介绍。

re

Python自带,正则表达式模块,import不出错则可以正常使用:

1
2
3
In [1]: import re

In [2]:

urllib

Python自带,提供一系列用于操作URL的功能。

1
2
3
4
5
6
In [2]: import urllib

In [3]: import urllib.request

In [4]: urllib.request.urlopen("http://www.baidu.com")
Out[4]: <http.client.HTTPResponse at 0x6e8abd0>

requests

用于请求的库。
安装:pip install requests

1
2
3
4
In [5]: import requests

In [6]: requests.get("http://www.baidu.com")
Out[6]: <Response [200]>

另外,使用 pip show xxx可以查看模块信息:

1
2
3
4
5
6
7
8
9
10
C:\Users\ASUS>pip show requests
Name: requests
Version: 2.18.4
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: d:\program files\python3.6.1\lib\site-packages
Requires: chardet, certifi, idna, urllib3

selenium

驱动浏览器的库,多用于自动化测试。爬虫时遇到js渲染的话用requests就无法获取请求内容,这时就可以使用这个库。(新一点的版本似乎说不再支持下面要说的phantomjs了,所以这里可以指定版本,我的是3.3.1)
安装:pip install selenium==3.3.1

1
2
3
In [7]: import selenium

In [8]: from selenium import webdriver

但是使用Chrome时,会报错:

1
2
3
4
5
6
In [9]: driver = webdriver.Chrome()
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
...
...
WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

这里需要下载一个chromedriver.exe,官网需要科学上网,可以点击这里下载。注意要下载支持你Chrome版本的driver。

下载之后把解压完的chromedriver.exe放到配置了环境变量的目录下,比如Scripts

之后就可以使用了:

1
2
3
In [10]: driver = webdriver.Chrome()

DevTools listening on ws://127.0.0.1:12591/devtools/browser/518f43b6-3307-43df-83da-547e126a7d65

也可以使用指定路径的写法:

1
driver = webdriver.Chrome("D:\Program Files\Python3.6.1\Scripts\chromedriver.exe")

执行完会打开一个Chrome窗口。然后执行:

1
In [14]: driver.get("http://www.baidu.com")

这个Chrome浏览器就会访问该网址。

使用driver.page_source就会显示源码:

1
2
3
4
In [17]: driver.page_source
Out[17]: '<!DOCTYPE html><!--STATUS OK--><html xmlns="http://www.w3.org/1999/xhtml"><head>\n \n <meta http-equiv="content-type" content="text/html;charset=utf-8" />\n <meta http-equiv="X-UA-Compatible" content="IE=Edge" />\n\t<meta content="always" name="referrer" />\n <meta name="theme-color" content="#2932e1" />\n <link rel="shortcut icon" href="/favicon.ico"
...
...

phantomjs

这是一个无界面浏览器,也就是不会弹出浏览器窗口。点击这里可以下载。

下载完成后解压到你想要的目录,然后把bin的路径配置到环境变量Path里。

打开命令行运行phantomjs可以执行js代码:

1
2
3
4
5
C:\Users\ASUS>phantomjs
phantomjs> console.log("Hello,World!")
Hello,World!
undefined
phantomjs>

然后我们就可以使用了:

1
2
3
4
5
6
7
8
9
10
In [1]: from selenium import webdriver

In [2]: driver = webdriver.PhantomJS()

In [3]: driver.get("http://www.baidu.com")

In [4]: driver.page_source
Out[4]: '<!DOCTYPE html><!--STATUS OK--><html><head>\n \n <meta http-equiv="content-type" content="text/html;charset=utf-8">\n <meta http-equiv="X-UA-Compatible" content="IE=Edge">\n\t<meta content="always" name="referrer">\n <meta name="theme-color" content="
...
...

lxml

提供xpath用于解析网页。
安装:pip install lxml
使用pip安装时,可能会网络等因素出现一些问题。也可以访问pypi下载.whl文件再用pip命令安装。不过你要先pip install wheel安装wheel。

1
2
3
In [5]: import lxml

In [6]:

beautifulsoup

也是一个解析网页的库,它是依赖于lxml的,所以要先安装lxml库
安装:pip install beautifulsoup4

1
2
3
4
5
In [5]: import lxml

In [6]: from bs4 import BeautifulSoup

In [7]: soup = BeautifulSoup('<html></html>', 'lxml')

然后就可以使用这个soup对象了。

pyquery

也是一个网页解析库,语法和jquery相同。
安装:pip install pyquery

1
2
3
4
5
6
7
8
In [8]: from pyquery import PyQuery as pq

In [9]: doc = pq('<html>Hello,World!</html>')

In [10]: result = doc('html').text()

In [11]: result
Out[11]: 'Hello,World!'

pymysql

用于操作MySQL数据库,Python2.x里是MySQLdb
安装:pip install pymysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
In [2]: import pymysql

In [3]: conn = pymysql.Connect(host='localhost', user='root', password='123456', port=3306, db='pymysql')

In [4]: cursor = conn.cursor()

In [5]: cursor.execute('SELECT * FROM user')
Out[5]: 8

In [6]: cursor.fetchall()
Out[6]:
((3, 'name3'),
(4, 'name4'),
(5, 'name5'),
(6, 'name6'),
(7, 'name7'),
(8, 'name8'),
(9, 'name99'),
(10, 'name10'))

pymongo

用于操作MongoDB数据库。
安装:pip install pymongo

1
2
3
4
5
6
7
8
9
10
11
In [11]: import pymongo

In [12]: client = pymongo.MongoClient('localhost')

In [13]: db = client['test']

In [14]: db['table'].insert_one({'name':'Jeff'})
Out[14]: <pymongo.results.InsertOneResult at 0x7309828>

In [15]: db['table'].find_one({'name':'Jeff'})
Out[15]: {'_id': ObjectId('5a92595d3c7e6c30847793dc'), 'name': 'Jeff'}

redis

也是存储key - value的非关系型数据库,主要用于分布式爬虫。
安装:pip install redis

1
2
3
4
5
6
7
8
9
In [18]: import redis

In [19]: r = redis.Redis('localhost', 6379)

In [20]: r.set('name', 'Jeff')
Out[20]: True

In [21]: r.get('name')
Out[21]: b'Jeff'

jupyter

功能强大的notebook,可以记markdown,可以调试代码。
安装:pip install jupyter

cmd命令行执行jupyter notebook就可以在浏览器使用。


也可以使用pip同时安装多个库:

1
pip install requests selenium lxml beautifulsoup4 pyquery pymysql pymongo redis jupyter