Javascript 使用硒+;发痒的
我正在尝试将scrapy与selenium结合使用,以便能够与javascript交互,并且仍然拥有scrapy提供的强大的scraping框架。我写了一个脚本,可以访问,在搜索栏中输入“Amsterdam”,然后成功单击搜索按钮。单击搜索按钮后,我希望scrapy从新呈现的页面中检索一个元素。不幸的是,scrapy不返回任何值 这就是我的代码的样子:Javascript 使用硒+;发痒的,javascript,python,selenium,scrapy,Javascript,Python,Selenium,Scrapy,我正在尝试将scrapy与selenium结合使用,以便能够与javascript交互,并且仍然拥有scrapy提供的强大的scraping框架。我写了一个脚本,可以访问,在搜索栏中输入“Amsterdam”,然后成功单击搜索按钮。单击搜索按钮后,我希望scrapy从新呈现的页面中检索一个元素。不幸的是,scrapy不返回任何值 这就是我的代码的样子: from selenium import webdriver from scrapy.loader import ItemLoader from
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()
Q:我如何成功地让scrapy在页面上通过xpath找到我称为“description”的元素,并将其作为输出返回
提前谢谢 分配给
ItemLoader
的response
对象是scrapy
响应,而不是Selenium响应
我建议使用selenium返回的页面源创建一个新的选择器
:
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\uxpath
将从该响应结构而不是scrapy(您实际上不需要)获取信息 @eLRuLL it确实到达了解析,否则selenium就不会移动到下一页了,对吗?您可能想看看这个,了解Scrapy与selenium结合的其他方法:如我所说;我想使用scrapy来刮取数据,因为它的速度快!我知道如何使用硒。:)@在selenium中,提多萨达姆的速度并不是一个真正的东西。如果想要提高速度,您需要完全抛弃selenium,或者用支持异步渲染的东西替换它。i、 e.@Granitosaurus是否可以像本例中的selenium那样使用splash在页面中移动?@titusAdam可以单独使用scrapy,而不使用任何javascript渲染。@titusAdam我刚刚回答了您发布的问题:如何成功地使scrapy找到我称之为“description”的元素通过页面上的xpath访问selenium并将其作为输出返回?