首页 > 解决方案 > 使用scrapy关注新闻链接

问题描述

我是爬虫和爬虫的新手,我正在尝试从https://www.lacuarta.com/提取一些新闻,也只是与标签 san-valentin 匹配的新闻。

该网页只是带有新闻图片的标题,如果您想阅读它,您必须点击新闻,然后您将进入故事页面(https://www.lacuarta.com/etiqueta/圣瓦伦丁/ )

所以,我想我的步骤是:

  1. 转到与我想要的标签匹配的页面,在本例中为 san-valentin
  2. 从新闻中提取网址
  3. 转到新闻页面
  4. 提取我想要的数据

我已经有了第 1 点和第 2 点:

import scrapy

class SpiderTags(scrapy.Spider):
    name = "SpiderTags"

    def start_requests(self):
        url = 'https://www.lacuarta.com/etiqueta/'
        tag = getattr(self, 'tag', None)
        if tag is not None:
            url = url + 'etiqueta/' + tag
        yield scrapy.Request(url, self.parse)

    def parse(self, response):
        for url in response.css("h4.normal a::attr(href)"):
            yield{
                "link:": url.get()
            }

到这里我有新闻的链接,现在我不知道如何输入该新闻以提取我想要的数据,然后返回我的原始网页以转到第 2 页并重复所有内容

PD:我想要的信息已经知道如何获得它

标签: python-3.xweb-scrapingscrapyweb-crawlerscrapy-spider

解决方案


您需要yield一个新Request的才能访问该链接。例如:

def parse(self, response):
    for url in response.css("h4.normal a::attr(href)"):
        # This will get the URL value, not follow it:
        # yield{
        #     "link:": url.get()
        # }
        # This will follow the URL:
        yield scrapy.Request(url.get(), self.parse_news_item)

def parse_news_item(self, response):
    # Extract things from the news item page.
    yield {
        'Title': response.css("title::text").get(),
        'Story': response.css("div.col-md-11 p::text").getall(),
        'Author': response.css("div.col-sm-6 h4 a::text").getall(),
        'Date': response.css("div.col-sm-6 h4 small span::text").getall(),
    }

推荐阅读