【问题标题】:Using Scrapy to get all the articles使用 Scrapy 获取所有文章
【发布时间】:2020-10-22 09:42:44
【问题描述】:

我将这个脚本与 Scrapy 一起使用:

import scrapy


class PageSpider(scrapy.Spider):
    name = "page"
    start_urls = ['http://blog.theodo.com/']

    def parse(self, response):
        for article_url in response.css('.Link-sc-19p3alm-0 fnuPWK a ::attr("href")').extract():
            yield response.follow(article_url, callback=self.parse_article)

    def parse_article(self, response):
        content = response.xpath(".//div[@class='entry-content']/descendant::text()").extract()
        yield {'article': ''.join(content)}

我正在学习教程,但我猜有些部分需要更改。

我已经改变了:

response.css('.Link-sc-19p3alm-0 fnuPWK a ::attr("href")').extract():

我想这就是我获取文章链接所需要的->

link

但我坚持使用 xpath。文章的所有内容都包含在一个 div 中,但没有 entry-content 了:

xpath

我想知道我是否在 response.css 中放入了正确的东西,以及我需要在 xpath 中编写的路径并理解其背后的逻辑。

谢谢你,我希望我的帖子很清楚:)

【问题讨论】:

    标签: python-3.x web-scraping scrapy


    【解决方案1】:

    我不确定,但我认为您需要在 fnuPWK 之前加分,例如:

    response.css('.Link-sc-19p3alm-0 .fnuPWK a ::attr("href")').extract()
    

    因为我认为这是一门课。

    另外值得一提的是,您可以使用元素检查复制 Xpath、CSS 选择器等(参见下图中的示例)。这样您就可以确定您拥有正确的 Xpath。

    Chrome inspect element copy XPath example

    【讨论】:

    • 我总是先在 scrapy shell 中尝试我的 xpath 表达式,以检查它们是否有效。如果是,您可以轻松地复制+粘贴到您的代码中。只是一点注释 x)
    【解决方案2】:

    打开你的终端,写scrapy shell 'blog.theodo.com'

    对于你必须做的href元素:

    response.xpath('//a[@class="Link-sc-19p3alm-0 fnuPWK"]/@href').get()

    我也不能给你一个“文本”的例子,因为你的图片没有为我显示足够的信息。

    还请记住:如果您使用 ' 作为第一个引号,则必须在 class= 之后使用双引号,例如('//div[@class=""]')

    关于https://www.formatic-centre.fr/formation/dynamiser-vos-equipes-special-post-confinement/的整篇文章

    response.xpath('//div[@class="course-des-content"]//text()').getall()

    .get() 将为您提供第一个匹配项,但在这种情况下,getall 更适合 imo

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多