gpt4 book ai didi

python - 为需要身份验证的网页使用 selenium 进行 Scrapy

转载 作者:行者123 更新时间:2023-11-28 17:38:04 28 4
gpt4 key购买 nike

我正在尝试从具有大量 AJAX 调用和 javascript 执行以呈现网页的页面中抓取数据。因此我正在尝试将 scrapy 与 selenium 结合使用来执行此操作。作案手法如下:

  1. 将登录页面 URL 添加到 scrapy start_urls 列表

  2. 使用 formrequest from response 方法发布用户名和密码以进行身份​​验证。

  3. 登录后,请求抓取所需的页面
  4. 将此响应传递给 Selenium Webdriver 以单击页面上的按钮。
  5. 单击按钮并呈现新网页后,捕获结果。

到目前为止,我的代码如下:

 from scrapy.spider import BaseSpider
from scrapy.http import FormRequest, Request
from selenium import webdriver
import time


class LoginSpider(BaseSpider):
name = "sel_spid"
start_urls = ["http://www.example.com/login.aspx"]


def __init__(self):
self.driver = webdriver.Firefox()


def parse(self, response):
return FormRequest.from_response(response,
formdata={'User': 'username', 'Pass': 'password'},
callback=self.check_login_response)

def check_login_response(self, response):
if "Log Out" in response.body:
self.log("Successfully logged in")
scrape_url = "http://www.example.com/authen_handler.aspx?SearchString=DWT+%3E%3d+500"
yield Request(url=scrape_url, callback=self.parse_page)
else:
self.log("Bad credentials")

def parse_page(self, response):
self.driver.get(response.url)
next = self.driver.find_element_by_class_name('dxWeb_pNext')
next.click()
time.sleep(2)
# capture the html and store in a file

到目前为止,我遇到的两个障碍是:

  1. 第 4 步不起作用。每当 selenium 打开 firefox 窗口时,它总是在登录屏幕并且不知道如何通过它。

  2. 我不知道如何实现第5步

任何帮助将不胜感激

最佳答案

我不相信你可以像那样在 scrapy Requests 和 selenium 之间切换。您需要使用 selenium 登录该站点,而不是 yield Request()。您使用 scrapy 创建的登录 session 不会传输到 selenium session 。这是一个示例(元素 ids/xpath 将因您而异):

    scrape_url = "http://www.example.com/authen_handler.aspx"
driver.get(scrape_url)
time.sleep(2)
username = self.driver.find_element_by_id("User")
password = self.driver.find_element_by_name("Pass")
username.send_keys("your_username")
password.send_keys("your_password")
self.driver.find_element_by_xpath("//input[@name='commit']").click()

然后你可以这样做:

    time.sleep(2)
next = self.driver.find_element_by_class_name('dxWeb_pNext').click()
time.sleep(2)

编辑:如果您需要渲染 javascript 并且担心速度/非阻塞,您可以使用 http://splash.readthedocs.org/en/latest/index.html这应该可以解决问题。

http://splash.readthedocs.org/en/latest/scripting-ref.html#splash-add-cookie有传cookie的细节,scrapy应该可以传,不过我没做过。

关于python - 为需要身份验证的网页使用 selenium 进行 Scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28420078/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com