使用 scrapy 从网站中提取 table

Extract table from the website using scrapy

我想从 table 中抓取文本,他们会给我数据,但不会给我图片中显示的这些格式的数据

from scrapy import Spider
from scrapy.http import Request




class AuthorSpider(Spider):
    name = 'book'
    start_urls = ['https://blogsrl.it/gb/4-no-food']
    def parse(self, response):
        books = response.xpath("//h3/a/@href").extract()
        for book in books:
            url = response.urljoin(book)
            yield Request(url, callback=self.parse_book)

    def parse_book(self, response):
        rows=response.xpath("//dl[@class='data-sheet']")
        details={}
        for row in rows:
            key = row.xpath('.//dt//text()').get(default='').strip()
            value=row.xpath('.//dd/text()').getall()
            value = ''.join(value).strip()
            details[key] = value
        yield details

我认为问题出在您的 XPATH 上。你的 XPATH 不会 return 你一个列表,而是 return 字符串,因为它只针对 1 个元素。

也许试试

rows=response.xpath("//dl[@class='data-sheet']//dt | //dl[@class='data-sheet']//dd ")

在您的 parse_book 回调中,变量 rows 不是 return 列表而是单个元素,因此您无法遍历它。您需要遍历行名称或行值。请参阅下面的代码片段,了解如何遍历行名称。

def parse_book(self, response):
    rows=response.xpath("//dl[@class='data-sheet']/dt")
    details={}
    for row in rows:
        key = row.xpath("./text()").get()
        value=row.xpath("./following-sibling::dd/text()").get()
        details[key] = value
    yield details