【问题标题】:Scrapy returns no data from css pathScrapy 不从 css 路径返回数据
【发布时间】:2019-11-13 06:02:59
【问题描述】:

我正在尝试将链接(或者更确切地说是列表 ID)抓取到此 website 第一页上的列表。 我认为正确的 css 选择器必须是

div.property-content-list > div.property-text > h3 > a::attr(href)

至少当我在元素检查器中搜索这个选择器(没有::attr(href))时,它似乎应该返回正确的数据。但是,在运行蜘蛛时,我得到一个空输出。

我是 scrapy 和 css 选择器的新手,但对大多数其他网站都了解。我的错误在哪里?

作为参考,这是我的蜘蛛的解析方法。

    def parse(self, response):
    for quote in response.css('div.property-content-list > div.property-text > h3 > a::attr(href)').extract():
        yield {
            "href": quote
                }

谢谢

【问题讨论】:

    标签: python scrapy css-selectors


    【解决方案1】:

    在您的网站上,所有列表页面都遵循相同的命名模式mietangebot_ID.html。您实际上并不需要使用 CSS 选择器来获取 ID。

    您可以通过运行此 Bash 命令自行检查:

    curl -s "https://www.studenten-wg.de/angebote_lesen.html?detailsuche=aus&stadt=D%FCsseldorf&fuer=Wohnungen" | grep -Eo "mietangebot_[0-9]+\.html"
    

    它打印以下内容:

    mietangebot_1892908.html
    mietangebot_1892908.html
    mietangebot_1892908.html
    mietangebot_1866908.html
    [...]
    

    在您的爬虫中,您可以简单地使用 re.findall() 和命名模式并将 ID 捕获为一个组:

    import re
    
    listings_ids = re.findall(r"mietangebot_([0-9]+)\.html", response.text)
    print(listings_ids)
    

    这将打印您的列表:

    ['1891640', '1860266', etc...]
    

    【讨论】:

    • 谢谢!在这里使用正则表达式似乎是一个不错的选择。我仍然不确定实施情况。我将 findall() 方法放在 for 循环之前,并调整了 for 循环以遍历列表。但我仍然得到一个空字符串 - 知道我做错了什么吗?
    • 也许您不在正确的页面上?你能尝试打印response.text吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2015-11-04
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多