使用 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
我想从 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