使用scrapy获取使用Javascrip的结果的第二页

2024-09-30 14:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试抓取http://www.sueryder.org/Get-involved/Volunteering/All-Roles,正如您可以看到的,如果您单击第二个页面,页面的URL不会更改,而是通过javascript处理的。我一直试图使用“检查元素”中的“网络”选项卡,但我完全迷失了方向。我设法抓取了网站的第一页,下面是代码。在

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy_demo.items import ScrapyDemoItem


class MySpider(BaseSpider):
  name = "test"
  allowed_domains = ["sueryder.org"]
  start_urls = ["http://www.sueryder.org/Get-involved/Volunteering/All-Roles"]

  def parse(self, response):
      hxs = HtmlXPathSelector(response)
      titles = hxs.select('//tr')
      items = []
      for titles in titles:
          item = ScrapyDemoItem()
          item ["link"] = titles.select('td/text()').extract()
          items.append(item)
      return items

Tags: fromorgimporthttpgetwwwitemsall
1条回答
网友
1楼 · 发布于 2024-09-30 14:31:58

JavaScript只提交一个表单,所以使用FormRequest

from scrapy.http import FormRequest

for href in hxs.select('//div[@class="paging pag-num pag-arrows"]//a/@href'):
    target = href.split("'")[1]

    yield FormRequest.from_response(
        response=response, 
        formnumber=0,
        formdata={'__EVENTTARGET': target}
    )

您还必须子类CrawlSpider并设置Rule来对结果页进行爬网,因为在parse内进行这样的操作是行不通的。在

相关问题 更多 >