Python 网络爬虫基础教程
网络爬虫分类
- 通用网络爬虫:搜索引擎使用,通常遵守 robots 协议。
- robots 协议:网站通过 robots 协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。通用网络爬虫需要遵守 robots 协议(君子协议)。
- 查看网站的 robots 协议示例:
https://www.baidu.com/robots.txt
- 聚焦网络爬虫:针对特定主题或站点编写的爬虫程序。
爬取数据步骤
- 确定需要爬取的 URL 地址。
- 由请求模块向 URL 地址发出请求,并得到网站的响应。
- 利用解析模块从响应内容中提取所需数据。
- 保存所需数据。
- 如果页面中有其他需要继续跟进的 URL 地址,则继续第 2 步去发请求,如此循环。
爬虫入门:urllib 请求模块
基本请求与响应
使用 urllib.request 模块发送 HTTP 请求。
from urllib import request
# 获得响应对象
res = request.urlopen(url='http://www.baidu.com/')
# 获取网页源代码(默认是字节串,需要转为字符串)
html = res.read().decode()
# 获取实际地址(有些网页可能会进行重定向,从而返回另一个地址)
url = res.geturl()
# 返回 http 响应码
code = res.getcode()
print(res)
print('=' * 30)
print(html[:500]) # 仅打印前 500 字符以便阅读
print('=' * 30)
print(url)
print('=' * 30)
print(code)
注意: res.geturl() 返回的是最终的实际地址,因为某些网页会进行重定向。
处理 User-Agent 与反爬
浏览器访问网站时会携带 User-Agent 信息,而 Python 默认的请求头可能包含 python-urllib 标识,容易被服务器识别并拒绝访问。
问题: 直接访问可能被拦截。
解决方案: 在请求头中伪装成浏览器。
urllib request
url =
headers = {
:
}
req = request.Request(url=url, headers=headers)
res = request.urlopen(req)
html = res.read().decode()
(html)


