Я извлекаю метаданные и URL-адреса из 12 таблиц на веб-странице, и, хотя у меня это работает, я довольно плохо знаком с xpath и scrapy, так есть ли более краткий способ, которым я мог бы сделать это?
Первоначально я получал множество дубликатов, когда я пробовал различные пути xpath и понял, что каждая строка таблицы повторяется для каждой таблицы.Мое решение этого состояло в том, чтобы перечислять таблицы и проходить по каждой, собирая строки только для этой таблицы.Чувствуется, что, возможно, есть более простой способ сделать это, но я не уверен сейчас.
import scrapy
class LinkCheckerSpider(scrapy.Spider):
name = 'foodstandardsagency'
allowed_domains = ['ratings.food.gov.uk']
start_urls = ['https://ratings.food.gov.uk/open-data/en-gb/']
def parse(self, response):
print(response.url)
tables = response.xpath('//*[@id="openDataStatic"]//table')
num_tables = len(tables)
for tabno in range(num_tables):
search_path = '// *[ @ id = "openDataStatic"] / table[%d] / tr'%tabno
rows = response.xpath(search_path)
for row in rows:
local_authority = row.xpath('td[1]//text()').extract()
last_update = row.xpath('td[2]//text()').extract()
num_businesses = row.xpath('td[3]//text()').extract()
xml_file_descr = row.xpath('td[4]//text()').extract()
xml_file = row.xpath('td[4]/a/@href').extract()
yield {'local_authority': local_authority[1],
'last_update':last_update[1],
'num_businesses':num_businesses[1],
'xml_file':xml_file[0],
'xml_file_descr':xml_file_descr[1]
}
'' '
И я запускаю его с
scrapy runspider fsa_xpath.py