错误403禁止用户代理

时间:2018-01-31 22:17:06

标签: beautifulsoup python-requests user-agent

我已经尝试过查看以前关于同一主题的帖子,但似乎没有任何解决方案可行,我想确认一下我确实没有办法解决这个问题。

我是一名记者,试图从规划当局的网站上下载许可证数据。直到几个月前我才能做到这一点没有问题,但网站已经更改,在我的代码调整到新网站后,我现在似乎每次尝试关注网站上的链接时都会收到错误403。

非常感谢任何帮助。

我的代码 - 不是最好看或效率最高的,但我自学并使用编码主要是为了抓取工作数据 - 页面上的统计信息:http://www.pa.org.mt/padecisionSearch?date=1/31/2018%2012:00:00%20AM

在我粘贴的代码中,我试图访问每个链接许可链接(页面上的第一个:http://www.pa.org.mt/PACaseDetails?Systemkey=200414&CaseType=PA/10351/17%27)以便刮取许可详细信息。

虽然我可以毫无问题地生成链接地址(可以通过单击链接访问它们),但是向地址发送请求会返回:

b' \ r \ n禁止\ r \ n \ r \ n

禁止访问网址

\ r \ n

HTTP错误403.请求网址是禁止的。

\ r \ n \ r \ n'

我尝试过更改用户代理,我也尝试在请求之间插入一个计时器,但似乎没有任何效果。

非常欢迎任何建议

我的代码:

import  requests
import pandas as pd
import csv
from bs4 import BeautifulSoup
from datetime import date, timedelta as td
import pandas as pd
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
import urllib




with requests.Session() as s:
        #s.headers.update(head)
        r= s.get("http://www.pa.org.mt",data=None, headers =  {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,   like Gecko) Chrome/63.0.3239.132 Safari/537.36"})

        page = (s.get("http://www.pa.org.mt/padecisionSearch?date=1/31/2018%2012:00:00%20AM", data=None, headers =  {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/63.0.3239.132 Safari/537.36"}).content)
        soup = BeautifulSoup(page, 'html.parser')

        search_1 = soup.find_all('table')
        for item in search_1:   
            item1 = item.find_all('tr')
            for item2 in item1:           
                    item3 = item2.find_all('td', class_ = 'fieldData')  

                    for element in item3:  

                        list2.append(element.text)
                        zejt_number = (len(list2)/6)
                        zi = element.find_all('a')  

                        if len(zi) == 0 and ((len(list2)-1)%5 == 0 or len(list2) == 1):  

                            case_status.append("")
                            applicant.append("")
                            architect.append("")
                            application_type.append("")
                            case_category.append("")
                            case_officer.append("")
                            case_officer2.append("")
                            date_approved.append("")
                            application_link.append("")

                        elif len(zi) != 0:   

                            for li in zi:
                                hyperlink = "http://www.pa.org.mt/"+li.get('href')
                                application_link.append(hyperlink)
                                print(hyperlink)
                                z = (s.get(hyperlink, data=None, headers =  {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}).content)    
                                print(z)

1 个答案:

答案 0 :(得分:0)

首先你的代码有点凌乱。这是你的所有代码吗?或只是其中的一部分?例如你要两次进口大熊猫。尽管如此,为什么这不起作用的主要问题是你正在生成的超链接:

for li in zi:
    hyperlink = "http://www.pa.org.mt/"+li.get('href')
    print(hyperlink)

结果如下:

http://www.pa.org.mt/../PACaseDetails?Systemkey=200414&CaseType=PA/10351/17'

这是链接不起作用。一个快速的解决方法是在您执行请求之前编辑超链接:

for li in zi:
    hyperlink = "http://www.pa.org.mt/"+li.get('href')
    hyperlink = hyperlink.replace('../', '')
    print(hyperlink)
    z = (s.get(hyperlink, data=None, headers =  {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}).content)    
    print(z)

现在超链接应如下所示:

http://www.pa.org.mt/PACaseDetails?Systemkey=200414&CaseType=PA/10351/17'

并且请求应该通过。