我正在一个网站上抓取最近的客户评级,有几个页面。
问题是,我能够与";sortby";选项并选择";最近的";使用Selenium,并使用Scrapy为第一页刮取数据。然而,我无法提取其他页面的数据,SeleniumWeb驱动程序不知何故不会呈现下一个页面。我的意图是自动化数据抓取。
我是网络抓取的新手。此处附有代码片段(由于保密性,一些信息被删除(
import scrapy
import selenium.webdriver as webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait,Select
import time
from selenium.webdriver.support import expected_conditions as EC
from scrapy import Selector
from selenium.webdriver.edge.options import Options
from scrapy.utils.project import get_project_settings
class ABC(scrapy.Spider):
#"........."
def start_requests(self):
#" ...... "
yield scrapy.Request(url)
def parse(self, response):
settings =get_project_settings()
driver_path = settings.get('EDGE_DRIVER_PATH')
options = Options()
options.add_argument("headless")
ser=Service(driver_path)
driver = webdriver.Edge(service=ser,options = options)
driver.get(response.url)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID,"sort-order-dropdown")))
element_dropdown=driver.find_element(By.ID,"sort-order-dropdown")
select=Select(element_dropdown)
select.select_by_value("recent")
time.sleep(5)
for review in response.css('[data-hook="review"]':
res={
"rating": review.css('[class="a-icon-alt"]::text').get(),
}
yield res
next_page =response.xpath('//a[text()="Next page"]/@href').get()
if next_page:
yield scrapy.Request(response.urljoin(next_page))
driver.quit()
看起来您使用的是Scrapy和Selenium而不是scrapy_selenium
(我在代码中没有看到任何SeleniumRequest
。
你当前的蜘蛛是这样工作的:
- 使用Scrapy获取页面
- 使用Selenium网络驱动程序获取相同的页面
- 使用Selenium执行一些操作
- 分析废料
response
(用于rating
和next_page
(
正如您所看到的,您从未使用/解析Selenium结果。