在Python中使用requests
库发送HTTP请求时,可以通过设置请求头(Headers)来模拟浏览器访问。这有助于避免被目标网站识别为爬虫而被阻止访问。以下是如何在代码示例中设置请求头的详细步骤和解释。
一、设置请求头
请求头(Headers)是HTTP请求的一部分,包含了关于请求的元数据,如客户端信息、请求来源、接受的数据类型等。通过设置合适的请求头,可以模拟不同的浏览器访问行为。
常见的请求头字段
-
User-Agent
:标识客户端的软件版本和操作系统信息。 -
Accept
:告知服务器客户端可接受的MIME类型。 -
Accept-Language
:告知服务器客户端可接受的语言。 -
Accept-Encoding
:告知服务器客户端可接受的编码方式。 -
Referer
:告知服务器当前请求是从哪个页面链接过来的。
二、代码示例中的请求头设置
在之前的代码示例中,我们已经设置了User-Agent
请求头来模拟浏览器访问。为了更全面地模拟浏览器行为,可以添加更多的请求头字段。以下是完整的示例代码:
python">import requests
from bs4 import BeautifulSoup
import pandas as pd# 目标搜索URL
base_url = 'https://s.1688.com/selloffer/offer_search.htm'
keyword = '女装'
params = {'keywords': keyword,'n': 'y','netType': '1','spm': 'a2605.q4826858.1998416437.1'
}# 设置请求头,模拟浏览器访问
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.3','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6','Accept-Encoding': 'gzip, deflate, sdch, br','Referer': 'https://www.1688.com/'
}# 发送GET请求
response = requests.get(base_url, params=params, headers=headers)# 检查请求是否成功
if response.status_code == 200:# 解析HTML页面soup = BeautifulSoup(response.text, 'html.parser')# 提取商品信息products = []items = soup.find_all('div', class_='sm-offer-item')for item in items:title = item.find('a', class_='offer-title').text.strip()price = item.find('span', class_='price').text.strip()description = item.find('div', class_='desc').text.strip()sales = item.find('span', class_='sales').text.strip()products.append({'标题': title,'价格': price,'描述': description,'销量': sales})# 保存到DataFramedf = pd.DataFrame(products)df.to_csv('alibaba_search_results.csv', index=False, encoding='utf-8-sig')print('数据已保存到CSV文件中。')
else:print('请求失败,状态码:', response.status_code)
详细解释
-
User-Agent:这是最常用的请求头字段,用于标识客户端的软件版本和操作系统信息。通过设置一个常见的浏览器
User-Agent
,可以模拟浏览器访问。 -
Accept:告知服务器客户端可接受的MIME类型。设置为
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
,表示客户端可以接受多种类型的响应。 -
Accept-Language:告知服务器客户端可接受的语言。设置为
zh-CN,zh;q=0.8,en;q=0.6
,表示客户端优先接受中文内容,其次为英文。 -
Accept-Encoding:告知服务器客户端可接受的编码方式。设置为
gzip, deflate, sdch, br
,表示客户端支持多种压缩编码方式。 -
Referer:告知服务器当前请求是从哪个页面链接过来的。设置为
https://www.1688.com/
,表示请求是从阿里巴巴首页发起的。
三、注意事项
(一)请求头的合法性
确保设置的请求头字段和值是合法的,避免使用虚假或恶意的请求头,这可能会导致请求被拒绝或引发安全问题。
(二)动态请求头
有些网站可能会根据客户端的行为动态调整请求头的要求。如果发现请求被拒绝,可以尝试调整请求头中的某些字段,或使用浏览器开发者工具(F12)查看实际发送的请求头,进行相应的调整。
(三)代理和请求头
如果使用代理服务器,确保代理服务器支持设置请求头。有些代理服务器可能会修改或删除请求头中的某些字段,导致请求失败。
四、结语
通过设置请求头,可以有效地模拟浏览器访问,提高爬虫的稳定性和成功率。在实际应用中,根据目标网站的要求和行为,灵活调整请求头字段,确保爬虫的正常运行。希望这些方法对你有所帮助,祝你在数据抓取和分析工作中取得更大的成功!