Python爬虫之网络请求
在Python爬虫中,网络请求是获取网页数据的重要方式。本文将为您详细讲解Python爬虫之网络请求的整攻略,包括如何使用requests库发送HTTP请求、如何处理HTTP响应、如何使用代理和如何处理异常。过程中将提供两个示例说明。
使用requests库发送HTTP请求
requests是Python中一个常用的HTTP库,可以用于发送HTTP请求。以下是使用requests库发送HTTP请求的示例代码:
import requests
url = 'https://www.example.com'
response = requests.get(url)
print(response.text)
在上面的代码中,我们使用requests库发送了一个GET请求,并将响应内容打印出来。requests.get方法接受一个URL参数,并返回一个Response对象。Response对象包含了HTTP响应的各种信息,如码、响应头和响应体等。我们可以使用response.text属性获取响应体的内容。
处理HTTP响应
在Python爬虫中,我们通常需要处理HTTP响应,以获取所需的数据。以下是处理HTTP响应的示例代码:
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string
print(title)
在上面的代码中,我们使用requests库发送了一个GET请求,并使用BeautifulSoup库解析响应体的HTML内容。我们使用soup.title.string属性获取HTML文档的标题,并将其打印出来。
使用代理
在爬网页数据时,我们可能需要使用代理服务器来隐藏自己的IP地址。以下是使用代理服务器发送HTTP请求的示例代码:
import requests
url = 'https://www.example.com'
proxy = {'http': 'http://127.0.0.1:8080', 'https': 'https://127.0.0.1:8080'}
response = requests.get(url, proxies=proxy)
print(response.text)
在上面的代码中,我们使用requests库发送了一个GET请求,并使用代理服务器127.0.0.1:8080。我们将代理服务器的地址和端口号封装在一个字典中,并将其作为proxies参数传递给requests.get方法。
处理异常
在Python爬虫中,我们需要处理各种异常情况,如网络连接超时、HTTP错误等。以下是处理异常的示例代码:
requests
url = 'https://www.example.com'
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
except requests.exceptions.Timeout:
print('Timeout error')
except requests.exceptions.HTTPError:
print('HTTP error')
except requests.exceptions.RequestException as e:
print('Other error:', e)
else:
print(response.text)
在上面的代码中,我们使用requests库发送了一个GET请求,并设置了超时时间为5秒。我们使用try-except语句来捕获各种异常情况,并打印相应的错误信息。如果没有发生异常,我们将打印响应体的内容。
示例说明
示例一
以下是一个简单的Python爬虫,它使用requests库发送HTTP请求,并使用正则表达式提取HTML文档中的所有链接。
import re
import requests
url = 'https://www.example.com'
response = requests.get(url)
pattern = re.compile('<a href="(.*?)">.*?</a>')
links = pattern.findall(response.text)
for link in links:
print(link)
在上面的代码中,我们使用requests库发送了一个GET请求,并使用正则表达式提取HTML文档中的所有链接。我们使用re.compile方法编译了一个正则表达式,并使用findall方法在响应体中查找所有匹配的字符串。最后,我们使用for循环遍历所有链接,并将其打印出来。
示例二
以下是一个Python爬虫,它使用requests库发送HTTP请求,并使用BeautifulSoup库解析响应体的HTML内容,然后将结果保存到CSV文件中。
import csv
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com'
response =.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
rows = []
for tr in soup.find_all('tr'):
cols = []
for td in tr.find_all('td'):
cols.append(td.text.strip())
rows.append(cols)
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(rows)
在上面的代码中,我们使用requests库发送了一个GET请求,并使用BeautifulSoup库解析响应体的HTML内容。我们使用soup.find_all方法查找HTML文档中的所有tr标签,并使用嵌套的for循环遍历所有td标签。我们将每个td标签的文本内容添加到一个列表中,并将该列表添加到另一个列表中。最后,我们使用csv.writer将结果写入到CSV文件中。
总结
本文为您详细讲解了Python爬虫之网络请求的完整攻略,包括如何使用requests库发送HTTP请求、如何处理HTTP响应、如何使用代理和如何处理异常。通过学习本文,您可以更好地掌握Python爬虫中网络请求的方法,提高自己的爬虫技能。