Python 的爬虫功能使得程序员可以快速抓取并分析网页中的信息,它实质上是模拟浏览器访问网页。本章主要常用的两个爬虫相关的库requests,beautifulsoup4。若要模拟鼠标点击等,要用到selenium 库,限于篇幅限制,本章不再介绍,具体可以查阅相关资料。
requests 库每个网页都有源代码,可以通过鼠标单击右键查看网页源代码。网页中的很多信息都在源代码里面,requests 是一个访问网页源代码的库。一般通过 get 函数访问网页,另外一个常用来访问网页的函数是 post,与 get 函数的区别在于 post 能够传递表格或文件到网页所在服务器上。
| get(url, [timeout], [headers], [proxies], **kwargs) | |
|---|---|
| url | 网页链接 |
| timeout | 可选参数,请求网页的最大时长,单位为秒 |
| headers | 可选参数,模拟浏览器设置 |
| proxies | 可选参数,代理服务器设置 |
| **kwargs | 其他参数 |
get 或 post 函数返回一个 Resoponse 对象,该对象包括以下常用的属性或函数。
| 属性或函数 | 描述 |
|---|---|
| status_code | 网页请求的返回状态,200 表示连接成功,404 表示连接失败 |
| text | 响应网页的字符串内容 |
| encoding | 响应网页的编码方式,可以更改 |
| content | 相应网页的字节形式内容,例如图片或 pdf 文件等 |
| raise_for_status() | 如果网页访问不成功,抛出异常,一般结合 try-except 语句使用 |
| json() | 该函数可以解析网页内容中 JSON 格式的数据 |
import requests
r = requests.get('http://www.baidu.com')
r.status_code
200
r.text # 结果省略
r.encoding # 若为 ISO-8859-1 则中文为乱码
'ISO-8859-1'
r.encoding = 'utf-8' # 无论网页原内容是什么编码,都改成 utf-8 编码
beautifulsoup4库使用requests获取的网页源代码一般非常复杂,不仅包括常规内容,还包括很多定义页面格式的代码。
:class: tip
- 网页中的内容一般在网页源代码的各个标签里
例如有下面的 html 代码:
html_doc = """
Hello, BeautifulSoup!
text1
text2
"""
beautifulsoup4库提供了大量的属性或函数,能够方便地将网页(html)不同标签(tag)中的内容提取出来。常用的属性有下面几个:
| 属性 | 描述 |
|---|---|
| head | 网页源代码中的 标签内容 |
| title | 网页源代码中的 |
| body | 网页源代码中的 标签内容 |
| p | 网页源代码中的第一个 标签内容 |
| a | 网页源代码中的第一个 标签内容 |
| div | 网页源代码中的第一个 标签内容 |
| script | 网页源代码中的第一个 |