禁止请求的特点主要有以下几个方面:
应对和解除禁止请求的方法主要有以下几个方面:
下面我们来看一个简单的应对和解除禁止请求的案例,即利用Python标准库中的模块实现一个简单的百度搜索结果爬取功能,并使用代理服务器来避免被禁止请求。我们需要完成以下几个步骤:
下面是根据上述案例实现的代码:
# 导入所需的模块
import requests
from bs4 import BeautifulSoup
import re
# 构造请求头和代理信息
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}
# 爬虫代理
# 亿牛云 代理服务器
proxyHost = "www.16yun.cn"
proxyPort = "3111"
# 代理验证信息
proxyUser = "16YUN"
proxyPass = "16IP"
# 构造代理字典
proxies = {
"http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",
"https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}
# 发送请求并获取响应
# 定义搜索关键词
keyword = "Python"
# 定义搜索结果页数
page_num = 3
# 定义搜索结果列表
results = []
# 循环遍历每一页
for i in range(page_num):
# 构造请求URL
url = f"https://www.baidu.com/s?wd={keyword}&pn={i*10}"
# 发送请求并获取响应
response = requests.get(url, headers=headers, proxies=proxies)
# 判断响应状态码是否为200
if response.status_code == 200:
# 解析响应并提取数据
# 创建BeautifulSoup对象
soup = BeautifulSoup(response.text, "lxml")
# 找到所有的搜索结果div标签
divs = soup.find_all("div", class_="result c-container new-pmd")
# 循环遍历每个div标签
for div in divs:
# 提取标题
title = div.find("h3").get_text()
# 提取链接
link = div.find("a").get("href")
# 提取摘要
summary = div.find("div", class_="c-abstract").get_text()
# 去除摘要中的日期和来源信息
summary = re.sub(r"\d{4}-\d{2}-\d{2}\s\S+\s", "", summary)
# 将标题、链接和摘要组成一个字典
result = {
"title": title,
"link": link,
"summary": summary
}
# 将字典添加到搜索结果列表中
results.append(result)
# 存储数据
# 打印搜索结果列表的长度和内容
print(f"共爬取了{len(results)}条搜索结果,内容如下:")
for result in results:
print(result)
通过上述案例,我们可以看到,应对和解除禁止请求的情况是非常重要而必要的。当然,这只是一个基础的方法,如果我们想要实现更复杂和高级的方法,我们还需要学习更多的知识和技术,例如反反爬虫、动态网页、数据清洗、数据分析等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。