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 给出“拒绝访问”的主要内容,如果未能解决你的问题,请参考以下文章

尝试安装 meilisearch 时出现拒绝访问错误

RegLoadKey 给出错误代码 5(拒绝访问)

对文件的查询输出给出拒绝访问错误

我创建了一个子域,当我尝试访问它时,它给出了拒绝访问错误

python Web Image Scraper

带有自定义 AuthenticationProvider 的 spring security 给出了拒绝访问错误