错误 403 Forbidden not User-Agent

Error 403 Forbidden not User-Agent

我试过查看以前关于同一主题的帖子,但 none 的解决方案似乎有效,我想确认我确实无能为力。

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

如有任何帮助,我们将不胜感激。

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

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

虽然我可以毫无问题地生成 link 地址(可以通过单击 link 访问它们),但向地址 returns:

发送请求

b'\r\nForbidden\r\n\r\n

已禁止 URL

\r\n

HTTP 错误 403。请求 URL被禁止。

\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)

首先你的代码有点乱。这是你所有的代码吗?或者只是其中的一部分?例如您正在导入 pandas 两次。尽管如此,为什么这不起作用的主要问题是您正在生成的 hyperlinks:

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'

这是 link 行不通的。一个快速的解决方法是在执行请求之前编辑 hyperlink:

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)

hyperlinks 现在应该如下所示:

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

并且请求应该通过。