gpt4 book ai didi

javascript - 使用 Selenium + Scrapy

转载 作者:行者123 更新时间:2023-11-28 22:31:26 25 4
gpt4 key购买 nike

我正在尝试将 scrapy 与 selenium 结合使用,以便能够与 javascript 进行交互,并且仍然拥有 scrapy 提供的强大的抓取框架。我写了一个访问 http://www.iens.nl 的脚本, 在搜索栏中输入“阿姆斯特丹”,然后成功点击搜索按钮。单击搜索按钮后,我希望 scrapy 从新呈现的页面中检索一个元素。不幸的是,scrapy 不返回任何值。

我的代码是这样的:

from selenium import webdriver
from scrapy.loader import ItemLoader
from scrapy import Request
from scrapy.crawler import CrawlerProcess
from properties import PropertiesItem
import scrapy


class BasicSpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
# Start on a property page
start_urls = ['http://www.iens.nl']

def __init__(self):
chrome_path = '/Users/username/Documents/chromedriver'
self.driver = webdriver.Chrome(chrome_path)

def parse(self, response):
self.driver.get(response.url)
text_box = self.driver.find_element_by_xpath('//*[@id="searchText"]')
submit_button = self.driver.find_element_by_xpath('//*[@id="button_search"]')
text_box.send_keys("Amsterdam")
submit_button.click()

l = ItemLoader(item=PropertiesItem(), response=response)
l.add_xpath('description', '//*[@id="results"]/ul/li[1]/div[2]/h3/a/')

return l.load_item()


process = CrawlerProcess()
process.crawl(BasicSpider)
process.start()

“属性”是另一个看起来像这样的脚本:

from scrapy.item import Item, Field

class PropertiesItem(Item):
# Primary fields
description = Field()

问:如何让 scrapy 在 selenium 到达的页面上通过其 xpath 成功找到我称为“描述”的元素并将其作为输出返回?

提前致谢!

最佳答案

您分配给 ItemLoaderresponse 对象是 scrapy 响应,而不是 Selenium 的响应。

我建议使用 selenium 返回的页面源创建一个新的 Selector:

from scrapy import Selector
...

selenium_response_text = driver.page_source

new_selector = Selector(text=selenium_response_text)
l = ItemLoader(item=PropertiesItem(), selector=new_selector)
...

这样 add_xpath 将从该响应结构而不是 scrapy(您实际上不需要)获取信息。

关于javascript - 使用 Selenium + Scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571456/

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