我试图从this web form获取结果(样本ID:15740175)。实际上我正在以与表单相同的方式从Scrapy发送POST请求。
我正在使用非阻止的IP工作 - 我可以在这台机器上成功地从Firefox发出请求。我使用Firefox并禁用了JavaScript和Cookie,因此该网站不需要JS或Cookie来返回结果。
这是我的Scrapy代码:
allowed_domains = ['eservices.landregistry.gov.uk']
start_urls = []
_FORM_URL = "http://eservices.landregistry.gov.uk/www/wps/portal/!ut/p/b1/" \
"hc7LDoIwEAXQb-ELOrQFu60EgSgg8hDYEFQ0GHksCIZ-veBODTK7Sc69MyhFMU" \
"rrvC9veVc2df6Y9lTNCGZUlik2GVFXYCkbg8iBQoCSESR_gCEv5Y8oBpr5d9ba" \
"QxfvhNYHd-ENjtCxLTg44vy0ndP-Eh3CNefGoLMa-UU95tKvanfDwSJrd2sQDw" \
"OoP-DzNsMLYPr9DWBmOCDHbKoCJSNbzfWwiKK2CvvyoF81LkkvDLGUgw!!/dl4" \
"/d5/L0lDU0lKSmdwcGlRb0tVUW9LVVEhL29Gb2dBRUlRaGpFQ1VJZ0FJQUl5Rk" \
"FNaHdVaFM0SldsYTRvIS80RzNhRDJnanZ5aERVd3BNaFFqVW81Q2pHcHhBL1o3" \
"XzMyODQxMTQySDgzNjcwSTVGRzMxVDUzOFY0LzAvMjc0MzY5MTc0Njk2L3NwZl" \
"9BY3Rpb25OYW1lL3NwZl9BY3Rpb25MaXN0ZW5lci9zcGZfc3RydXRzQWN0aW9uL" \
"yEyZlFEU2VhcmNoLmRv/"
def start_requests(self):
settings = get_project_settings()
ids = ['15740175']
for i, id in enumerate(ids):
yield FormRequest(
url=self._FORM_URL,
formdata={
'polygonId': id,
'enquiryType': 'lrInspireId',
},
headers={
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:43.0) Gecko/20100101 Firefox/43.0",
'Accept-Language': 'en-GB,en;q=0.5', '
'Referer': ''
}
)
def parse(self, response):
# do parsing here
但是在日志中我只看到403响应。 (注意,该网站的robots.txt并不禁止抓取。)
我已经使用Charles来检查Scrapy发送的请求,并且所有请求标头(包括User-Agent)看起来与我在Firefox中发出请求并返回200时发送的请求标头相同。
据推测,该网站知道我是刮刀并阻挡了我,但它是如何知道的?我真的很神秘。我只发送一个响应,因此无法解决速率限制或下载延迟问题。
答案 0 :(得分:0)
此网站可能会受到CSRF(跨网站请求伪造)的保护。此外,操作URL看起来像session token,可以防止重放攻击。但是,在以这种方式访问本网站之前,抓取可能是非法的并与本网站/组织的所有者核实
答案 1 :(得分:0)
只需在浏览器中打开页面源HTML并多次刷新 - 您每次都会看到表单操作URL正在更改,因此当您尝试将其用作硬编码时,它是动态URL。您应首先使用表单获取HTML页面,然后使用当前表单操作URL发送表单数据。