引言
网络爬虫是一种自动化程序,用于从互联网上抓取数据。无论是用于数据分析、市场研究、学术研究,还是搜索引擎的网页索引,爬虫技术都在现代互联网应用中发挥着重要作用。
本文将通过 requests 库 来讲解如何进行基本的网页数据抓取。requests 是 python 中一个简单易用的库,它通过封装 http 请求,简化了网络请求的过程,是实现网络爬虫的理想选择。
1. 安装 requests 库
首先,如果你还没有安装 requests 库,可以通过 pip 安装:
pip install requests
2. 发送简单的 http 请求
requests
库的核心功能是发送 http 请求并获取响应。下面是一个简单的示例,展示如何向一个网页发送 get 请求并查看响应内容。
import requests # 发送 get 请求 response = requests.get('https://www.example.com') # 输出响应状态码 print("status code:", response.status_code) # 输出网页内容(html) print("response text:", response.text)
解释:
requests.get(url)
:向指定的 url 发送 get 请求。response.status_code
:返回 http 响应的状态码(如 200 表示成功)。response.text
:返回网页的 html 内容。
3. 请求带有参数的 url
很多时候,网页需要带有查询参数来进行动态请求。requests
可以通过字典传递参数,方便地构造请求 url。
import requests url = 'https://httpbin.org/get' params = { 'name': 'john', 'age': 30 } # 发送带有查询参数的 get 请求 response = requests.get(url, params=params) # 输出响应的 url,查看最终请求的 url print("requested url:", response.url) # 输出响应内容 print("response text:", response.text)
在这个示例中,params 字典中的键值对将被编码为 url 查询参数,最终构成 url https://httpbin.org/get?name=john&age=30。
4. 发送 post 请求
有些网站的表单数据需要通过 post 请求提交。requests 库同样支持发送 post 请求,并且可以传递数据。
import requests url = 'https://httpbin.org/post' data = { 'username': 'admin', 'password': '123456' } # 发送 post 请求 response = requests.post(url, data=data) # 输出响应内容 print("response text:", response.text)
解释:
requests.post(url, data=data)
:向 url 发送 post 请求,并通过data
参数传递表单数据。- 你还可以用
json=data
传递 json 格式的数据。
5. 处理请求头(headers)
有时候,发送 http 请求时需要设置特定的请求头(headers),如用户代理(user-agent)、认证信息等。requests
可以通过 headers
参数轻松设置。
import requests url = 'https://www.example.com' headers = { 'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/58.0.3029.110 safari/537.36' } # 发送带有头部信息的 get 请求 response = requests.get(url, headers=headers) # 输出响应内容 print("response text:", response.text)
在这个示例中,user-agent
模拟了浏览器的请求,使得目标网站认为请求来自于浏览器,而不是爬虫。
6. 处理响应内容
requests
库支持多种响应格式,例如 html、json、图片等。通过检查响应的内容类型,你可以轻松地处理不同类型的数据。
6.1 解析 json 响应
有些网站返回的数据是 json 格式,requests
提供了 .json()
方法来解析 json 数据。
import requests url = 'https://jsonplaceholder.typicode.com/posts' response = requests.get(url) # 如果返回的是 json 数据,可以使用 .json() 方法解析 json_data = response.json() print("json data:", json_data)
6.2 下载文件(如图片)
如果爬取的内容是文件,例如图片,可以使用 requests
库的 content
属性来处理二进制数据。
import requests url = 'https://www.example.com/sample.jpg' response = requests.get(url) # 保存图片到本地 with open('sample.jpg', 'wb') as file: file.write(response.content)
7. 异常处理
在使用 requests
发送请求时,可能会遇到网络问题、超时、404 错误等。为了提高爬虫的健壮性,建议使用异常处理来捕获错误。
import requests try: response = requests.get('https://www.example.com', timeout=5) response.raise_for_status() # 如果响应状态码是 4xx 或 5xx,抛出异常 except requests.exceptions.requestexception as e: print(f"request failed: {e}")
8. 爬虫中的好实践
设置合理的请求间隔:为了避免对目标服务器造成过大的压力,可以设置请求间隔,避免频繁的请求。
import time time.sleep(1) # 暂停 1 秒
遵守 robots.txt 规范:在爬取数据之前,检查目标网站的
robots.txt
文件,确保你的爬虫遵守该网站的爬虫规则。使用代理:如果爬取频繁的请求导致被封禁,可以考虑使用代理池来改变请求的 ip 地址。
请求头伪装:模拟真实的浏览器请求,避免被识别为爬虫。
9. 总结
requests
库是 python 中非常简洁易用的 http 请求库,适用于大多数的网页数据抓取需求。在使用 requests
库时,你需要了解如何发送 get/post 请求,如何传递参数、处理响应数据以及处理异常情况。
以上就是使用python的requests库进行网页数据抓取的详细教程的详细内容,更多关于python requests库网页数据抓取的资料请关注代码网其它相关文章!
发表评论