【发布时间】:2017-01-27 11:06:10
【问题描述】:
我正在尝试从 this web form 中提取结果(示例 ID:15740175)。实际上,我正在从 Scrapy 发送一个 POST 请求,就像表单一样。
我正在使用非阻塞 IP 工作 - 我可以从这台机器上的 Firefox 成功发出请求。我正在使用禁用了 JavaScript 和 cookie 的 Firefox,因此该站点不需要 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 时发送的请求标头相同。
大概网站知道我是爬虫并阻止了我,但它怎么知道?我真的很迷惑。我只发送一个响应,所以它与速率限制或下载延迟无关。
【问题讨论】:
标签: web-scraping scrapy