我刮最近的客户评级的网站,有几页。
问题是,我可以使用Selenium与“sortby”选项交互并选择“most recent”,使用Scrapy抓取第一页的数据。但是,我无法提取其他页的数据,Selenium Web驱动程序不知何故无法呈现下一页。我的意图是自动化数据抓取。
我是一个新的网页抓取。一个代码片段附在这里(一些信息被删除,由于保密)
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()
1条答案
按热度按时间h4cxqtbf1#
看起来您使用的是Scrapy和Selenium而不是
scrapy_selenium
(我在您的代码中没有看到任何SeleniumRequest
。您当前的spider的工作方式如下:
1.使用Scrapy获取页面
1.使用Selenium webdriver获取相同的页面
1.使用Selenium执行一些操作
1.剖析片段
response
(适用于rating
和next_page
)如您所见,您从未使用/ parse Selenium结果。