Scrapy and captch

2024-09-29 19:34:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在站点https://www.barefootstudent.com/jobs(任何指向页面的链接http://www.barefootstudent.com/los_angeles/jobs/full_time/full_time_nanny_needed_in_venice_217021)中使用scrapy提交表单

我的scapy机器人成功登录,但我无法避免验证码。 表格提交我使用scrapy.FormRequest.from_response在

frq = scrapy.FormRequest.from_response(response, formdata={'message': 'itttttttt', 
                                   'security': captcha, 'name': 'fx',
                                   'category_id': '2', 'email': 'ololo%40gmail.com', 'item_id': '216640_2', 'location': '18', 'send_message': 'Send%20Message'
                                   }, callback=self.afterForm)

    yield frq

我想从这个页面加载验证码图像,并手动输入到脚本运行时。 等等

^{pr2}$

我尽力了

 urllib.urlretrieve(captcha, "./captcha.jpg")

但是这个方法加载错误的验证码(网站拒绝我的输入)。我试着打电话urllib.urlretieve在一个运行脚本中重复,每次他返回不同的验证码:(

之后,我尝试使用ImagePipeline。 但我的问题是返回项(下载图像)只有在函数完成执行之后才会发生,即使我使用的是yeld。在

 item = BfsItem()
 item['image_urls'] = [captcha]
 yield item
 captcha = raw_input("put captcha in manually>")  
 frq = scrapy.FormRequest.from_response(response, formdata={'message': 'itttttttt', 
                                   'security': captcha, 'name': 'fx',
                                   'category_id': '2', 'email': 'ololo%40gmail.com', 'item_id': '216640_2', 'location': '18', 'send_message': 'Send%20Message'
                                   }, callback=self.afterForm)
 yield frq

那一刻,当我的脚本请求输入时,图片是不下载的!在

如何修改我的脚本,并可以调用FormRequest后手动输入验证码?在

非常感谢!在


Tags: from脚本comidmessageresponsewwwitem
2条回答

我使用的方法通常很有效,如下所示(只是一个要点,您需要添加您的具体细节):

步骤1-获取验证码url(并保留表单的响应以便以后使用)

def parse_page_with_captcha(response):
    captcha_url = response.xpath(...)
    data_for_later = {'captcha_form': response} # store the response for later use
    return Request(captcha_url, callback=self.parse_captcha_download, meta=data_for_later)

第2步-现在scrapy将下载图片,我们必须在scrapy回调中正确处理它

^{pr2}$

重要细节

受验证码保护的表单需要某种方式将验证码图像与看到并回答验证码的特定用户/客户机链接起来。这通常是使用基于cookie的会话或隐藏在captcha表单中的特殊参数/图像标记来完成的。在

刮板代码必须小心不要破坏这个链接,否则它将回答一些验证码,但不是它必须的验证码。在

为什么Verz1Lka发布的两个示例不起作用?

在urllib.url检索这种方法完全不受刮痧的影响。虽然这通常是个坏主意(这不会利用scrapys调度等的好处),但这里的主要问题是:这个请求将完全不在目标站点用来跟踪哪个captcha被发送到特定浏览器的会话cookie、url参数等之外工作。在

另一方面,使用图像管道的方法在Scrapy的规则中运行得很好,但是这些图像下载被安排在稍后的时间进行,因此在需要时无法下载captcha。在

您正在下载不同的验证码图像,因为您使用的cookie与输入表单URL时收到的cookie不同。Scrapy自己管理cookies,所以最好使用Scrapy来下载图片。https://doc.scrapy.org/en/latest/topics/media-pipeline.html

相关问题 更多 >

    热门问题