如何获取下一页中的链接并将其存储在变量中?

How to obtain links in the following page and store it inside a variable?

我的objective是从一个页面中提取所有链接并存储起来,这样我就可以设计另一个爬虫来从中提取信息,并获得相关链接的详尽列表。 但是,似乎我没有将抓取工具指向正确的方向来提取这些链接,因为我得到了一个 NULL 列表。

'''

class ArticleSpider(scrapy.Spider):

    name = 'links'
    start_urls = [
    'https://abcnews.go.com/search?searchtext=Coronavirus&type=Story&sort=date'
    ]

    def parse(self, response):
        all_links = response.css("h2.selectorgadget_selected 
                                  a.AnchorLink.selectorgadget_selected::attr(href)").extract()
        yield{'linktext':all_links}

'''

您得到的是空列表,因为项目及其链接由 JavaScript 加载。 在 Chrome Dev Tools 中按 Cntrl + Shift + P 并执行 Disable JavaScript.After 你可以看到当 Scrapy 在 start_urls 中向 url 发出请求时得到了什么。 =13=]

幸运的是,您的脚本只是向 API 发出请求,您可以轻松地 mock.Here 您可以看到来自 API 的 JSON 响应。

所以你只需要在解析方法中向这个 url 发出请求 - https://abcnews.go.com/meta/api/search?q=Coronavirus&limit=10&sort=date&type=Story&section=&totalrecords=true&offset=0。 之后你所要做的就是解析这个响应并得到你需要的url。

import scrapy
import json
from scrapy import Request


class ArticleSpider(scrapy.Spider):
    name = 'links'

    start_urls = [
    'https://abcnews.go.com/search?searchtext=Coronavirus&type=Story&sort=date'
    ]

    api_url = "https://abcnews.go.com/meta/api/search?q=Coronavirus&limit=100&sort=date&type=Story&section=&totalrecords=true&offset=0"

    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0",
        "Accept": "*/*",
        "Accept-Language": "en-US,en;q=0.5",
        "Accept-Encoding": "gzip, deflate, br",
        "Connection": "keep-alive",
        "Pragma": "no-cache",
        "Cache-Control": "no-cache",
    }

    custom_settings = {
        'ROBOTSTXT_OBEY': 'False',
    }

    def parse(self, response):
        # We need this because otherwise Scrapy won't manage Cookies for us.
        yield Request(self.api_url, self.parse_api, headers=self.headers)
    
    def parse_api(self, response):
        data = json.loads(response.text)    
        # From data you can get your links