gpt4 book ai didi

python - 无法点击分页中的下一个按钮

转载 作者:行者123 更新时间:2023-12-02 02:42:09 25 4
gpt4 key购买 nike

我将 scrapy 与 scrapy-selenium 一起使用,但无法处理分页,因为 href 仅包含 # 符号。

class PropertyScraperSpider(scrapy.Spider):
name = 'property_scraper'
allowed_domains = ['www.samtrygg.se']



def start_requests(self):
yield SeleniumRequest(
url='https://www.samtrygg.se/RentalObject/NewSearch',
wait_time=3,
headers=self.headers,
callback=self.parse_links
)


def parse_links(self, response):
cards = response.xpath("//div[@class='owl-carousel owl-theme show-nav-hover']/div/a")

for card in cards:
link = card.xpath(".//@href").get()

print('\n\n:link',len(link))

yield SeleniumRequest(
url= link,
wait_time=3,
headers=self.headers,
callback=self.parse,
)
next_page = response.xpath("//a[@id='next']/@href").get()

print('\n\n\nNEXT_PAGE',next_page)
if next_page:
absolute_url = f'https://www.samtrygg.se/RentalObject/NewSearch{next_page}'
yield SeleniumRequest(
url=absolute_url,
headers=self.headers,
wait_time=3,
callback=self.parse_links
)

def parse(self,response):
pass

我需要有关此分页问题的帮助。我该如何处理?任何帮助将不胜感激。

最佳答案

在 Scrapy 中处理动态内容

Ryan 说的是正确的。为了扩展这一点,可以通过几种方式获取动态内容。

  1. 通过重新设计 HTTP 请求

如果可能的话,这是迄今为止获取动态内容的最佳方式,它是最高效且比 selenium 更不易损坏的方式。这取决于 JavaScript 是否触发 HTTP 请求来抓取网页数据。在这种情况下,在采取其他手段之前应该首先尝试

  • 使用 Splash(浏览器事件)
  • Scrapy有一个集成了splash的中间件。 Splash 预渲染页面,因此可以访问 javascript 加载的 HTML。它还具有一些浏览器事件功能。比 selenium 的劳动密集度要低,但它仍然是浏览器事件。

  • 使用 selenium_scrapy(浏览器事件)
  • 这是您在这里尝试的解决方案,问题是,它并没有真正提供很多选项来执行复杂的浏览器事件。所以它的真正目的是能够获取已经被 javascript 加载的 HTML。

  • 在中间件中使用 selenium(浏览器事件)
  • 您可以使用中间件来过滤请求,使用完整的 selenium 包。当没有其他选择并且您想要满足每个请求时,这是可以的。或者您想根据您发出的请求类型对其进行自定义

  • 直接在蜘蛛脚本中使用selenium。 (浏览器事件)
  • 在我看来,当所有其他选项都不可用并且您确实需要针对脚本的特定部分进行复杂的浏览器事件并且无法使用请求来完成它时,这是最后的手段。

    重新设计请求

    现在您已经基本了解它是什么了。您的浏览器(我更喜欢 Chrome)可以访问浏览器为显示您所看到的网站而发出的所有请求。如果您检查页面 --> 网络工具 --> XHR,您将看到所有 AJAX 请求(通常是 API 端点所在的位置)。

    enter image description here

    您可以看到所有请求,按大小排序往往会起作用,因为通常数据会是较大的请求。单击请求时,您可以访问它发送的 header 、响应预览和响应。

    enter image description here

    这里我们预览了您可能想要的数据。然后,我将以 cURL 的形式复制此请求并将其输入到像curl.trillworks.com 这样的网站中。

    enter image description here

    如果需要发出正确的 Scrapy 请求,这将为您提供 header 、参数和 cookie。在这种情况下,您实际上只需要其中一个参数来模拟 HTTP 请求。我倾向于使用 requests 包来处理我实际需要的内容,因为复制请求会为您提供请求中的所有内容,有些是您不需要的。

    关于python - 无法点击分页中的下一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63395605/

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