【问题标题】:Scrapy spider not scraping the data correctlyScrapy spider 无法正确抓取数据
【发布时间】:2021-03-04 15:47:46
【问题描述】:

我正在尝试使用 scrapy 从我的大学网站上抓取有关 circulrs 的数据,但我的蜘蛛没有正确抓取数据。有很多空白元素,由于某种原因,我也无法抓取通函的“href”属性。我假设我的 CSS 选择器是错误的,但我无法弄清楚我到底做错了什么。我使用“选择器小工具”Chrome 扩展复制了我的 CSS 选择器。我一直在学习scrapy,所以如果你能解释我做错了什么,那就太好了。

我从中抓取数据的网站是:https://www.imsnsit.org/imsnsit/notifications.php

我的代码是:

import scrapy
from ..items import CircularItem

class CircularSpider(scrapy.Spider):
    name = "circular"
    start_urls = [
        "https://www.imsnsit.org/imsnsit/notifications.php"
    ]

    def parse(self, response):
        items = CircularItem()
        all = response.css('tr~ tr+ tr font')
        for x in all:
            cirName = x.css('a font::text').extract()
            cirLink = x.css('.list-data-focus a').attrib['href'].extract()
            date = x.css('tr~ tr+ tr td::text').extract()
            items["Name"] = cirName
            items["href"] = cirLink
            items["Date"] = date
            yield items

【问题讨论】:

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


    【解决方案1】:

    我修改了你的解析回调函数。我将 CSS 选择器更改为 xpath。另外,尝试学习xpath selectors,它们非常强大且易于使用。 一般来说,使用自动选择器复制 CSS 或 xpath 是个坏主意,因为在某些情况下,它们可能会给您不正确的结果,或者只有一个元素没有通用路径。

    首先我选择所有tr。如果你仔细看,一些tr 只是用于分隔符的空白。您可以通过尝试选择date 来过滤它们,如果是None,您可以跳过该行。最后你可以选择cirNamecirLink

    另外,给定网站的标记不好,很难编写合适的选择器,元素没有很多属性,如classid。这就是我想出的解决方案,我知道它并不完美。

    def parse(self, response):
        items = CircularItem()
        all = response.xpath('//tr') # select all table items
        for x in all:
            date = x.xpath('.//td/font[@size="3"]/text()').get() # filter them by date
            if not date:
                continue
            cirName = x.xpath('.//a/font/text()').get()
            cirLink = x.xpath('.//a[@title="NOTICES / CIRCULARS"]/@href').get()
            items["Name"] = cirName
            items["href"] = cirLink
            items["Date"] = date
            yield items
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-03
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 2013-02-12
      • 1970-01-01
      相关资源
      最近更新 更多