如何使用 Scrapy 使用 ItemLoaders 从 table 中抓取数据?
How do I scrape data using ItemLoaders from a table using Scrapy?
我正在尝试从网站“https://www.brickworkratings.com/CreditRatings.aspx”中提取数据。有一个table通过它我可以很方便的通过Scrapy提取数据Shell.
我想使用 ItemLoaders,因为它非常强大并且提供更干净的体验。
下面是我的代码。
def start_requests(self):
yield Request("https://www.brickworkratings.com/CreditRatings.aspx", self.parse_credit_rating_response)
def parse_credit_rating_response(self, response):
table_rows = response.xpath('//*[@id="ContentPlaceHolder1_gvData"]//tr')
for table_row in table_rows:
loader = ItemLoader(SampleItem(), response=response)
try:
loader.get_xpath(table_row.xpath("td[1]//a/text()")[0].extract())
# loader.add_value('company_name', 'test')
except Exception as e:
print(e)
item = loader.load_item()
print(item)
yield item
我收到错误,
"XPath error: Invalid expression in
(Name of the Company)".
我相信我的 XPath 是正确的,但我不认为这是使用它的方式。我该如何正确使用它?我需要从 table 中提取数据并想使用更强大的 ItemLoaders。
任何帮助将不胜感激,已经坚持了很长时间。
构建加载器时需要指定initial/parent选择器。然后也不需要提供 response。然后您需要将 XPath string 传递给 add_xpath
而不是使用 get_xpath
。参考documentation.
假设您的 XPath 是正确的,下面是一个示例:
# All added selectors will now be relative to table_row.
loader = ItemLoader(SampleItem(), selector=table_row)
# Just give it the XPath here.
loader.add_xpath("field_name", "td[1]//a/text()")
如需额外处理,请查看input/output processors。
我正在尝试从网站“https://www.brickworkratings.com/CreditRatings.aspx”中提取数据。有一个table通过它我可以很方便的通过Scrapy提取数据Shell.
我想使用 ItemLoaders,因为它非常强大并且提供更干净的体验。
下面是我的代码。
def start_requests(self):
yield Request("https://www.brickworkratings.com/CreditRatings.aspx", self.parse_credit_rating_response)
def parse_credit_rating_response(self, response):
table_rows = response.xpath('//*[@id="ContentPlaceHolder1_gvData"]//tr')
for table_row in table_rows:
loader = ItemLoader(SampleItem(), response=response)
try:
loader.get_xpath(table_row.xpath("td[1]//a/text()")[0].extract())
# loader.add_value('company_name', 'test')
except Exception as e:
print(e)
item = loader.load_item()
print(item)
yield item
我收到错误,
"XPath error: Invalid expression in
(Name of the Company)".
我相信我的 XPath 是正确的,但我不认为这是使用它的方式。我该如何正确使用它?我需要从 table 中提取数据并想使用更强大的 ItemLoaders。
任何帮助将不胜感激,已经坚持了很长时间。
构建加载器时需要指定initial/parent选择器。然后也不需要提供 response。然后您需要将 XPath string 传递给 add_xpath
而不是使用 get_xpath
。参考documentation.
假设您的 XPath 是正确的,下面是一个示例:
# All added selectors will now be relative to table_row.
loader = ItemLoader(SampleItem(), selector=table_row)
# Just give it the XPath here.
loader.add_xpath("field_name", "td[1]//a/text()")
如需额外处理,请查看input/output processors。