Python 中的 Scraper 给出“拒绝访问”
Posted
技术标签:
【中文标题】Python 中的 Scraper 给出“拒绝访问”【英文标题】:Scraper in Python gives "Access Denied" 【发布时间】:2017-06-18 08:37:10 【问题描述】:我正在尝试用 Python 编写一个抓取工具来从页面中获取一些信息。喜欢此页面上显示的优惠标题:https://www.justdial.com/Panipat/Saree-Retailers/nct-10420585
现在我使用这个代码:
import bs4
import requests
def extract_source(url):
source=requests.get(url).text
return source
def extract_data(source):
soup=bs4.BeautifulSoup(source)
names=soup.findAll('title')
for i in names:
print i
extract_data(extract_source('https://www.justdial.com/Panipat/Saree-Retailers/nct-10420585'))
但是当我执行这段代码时,它给了我一个错误:
<titlee> Access Denied</titlee>
我能做些什么来解决这个问题?
【问题讨论】:
可能你应该设置用户代理。我正在投票将其移至 ***,您可以获得更多帮助。 【参考方案1】:正如cmets中提到的,您需要指定允许的用户代理并将其传递为headers
:
def extract_source(url):
headers = 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'
source=requests.get(url, headers=headers).text
return source
【讨论】:
【参考方案2】:试试这个:
import bs4
import requests
def extract_source(url):
agent = "User-Agent":"Mozilla/5.0"
source=requests.get(url, headers=agent).text
return source
def extract_data(source):
soup=bs4.BeautifulSoup(source, 'lxml')
names=soup.findAll('title')
for i in names:
print i
extract_data(extract_source('https://www.justdial.com/Panipat/Saree-Retailers/nct-10420585'))
我添加了“lxml”以潜在地避免解析错误。
【讨论】:
【参考方案3】:def extract_source(url):
headers = "User-Agent":"Mozilla/5.0"
source=requests.get(url, headers=headers).text
return source
出来:
<title>Saree Retailers in Panipat - Best Deals online - Justdial</title>
在您的请求中添加User-Agent
,某些站点不响应dnose没有User-Agent的请求
【讨论】:
以上是关于Python 中的 Scraper 给出“拒绝访问”的主要内容,如果未能解决你的问题,请参考以下文章