【发布时间】:2020-06-25 16:46:57
【问题描述】:
我的 Scrapy Spider 在遇到网站格式异常值时停止工作。这是出错的网站元素(突出显示的部分):
正确的有一个“a”属性。它看起来像下面((突出显示的部分)):
这是我的蜘蛛:
import scrapy
from scrapy.crawler import CrawlerProcess
class MySpider(scrapy.Spider):
name = "name"
allowed_domains = ["website domain"]
start_urls = ['Mywebsite link']
def parse(self, response):
self.log('I just visited: ' + response.url)
for i in response.css('tr.odd'):
item = {
'company_name': i.css('td > a::text')[0].extract(),
'ABN': i.css('td > a::text')[1].extract(),
'status': i.css('td::text')[2].extract(),
'size': i.css('td::text')[3].extract(),
'suburb/town': i.css('td::text')[4].extract(),
'state': i.css('td::text')[5].extract(),
}
yield item
for i in response.css('tr.even'):
item = {
'company_name': i.css('td > a::text')[0].extract(),
**'ABN': i.css('td > a::text')[1].extract()**, # this part stops working
'status': i.css('td::text')[2].extract(),
'size': i.css('td::text')[3].extract(),
'suburb/town': i.css('td::text')[4].extract(),
'state': i.css('td::text')[5].extract(),
}
yield item
# follow pagination link
next_page_url = response.css('li.next > a::attr(href)').extract_first()
if next_page_url:
next_page_url = response.urljoin(next_page_url)
yield scrapy.Request(url=next_page_url, callback=self.parse)
【问题讨论】:
-
您的代码需要
td中的 6 个链接。您应该只有 1 的输入 HTML(而且它不是公司名称)。考虑从头开始重写行提取。 -
谢谢你的回复,但我不明白你想说什么。
-
您是否编写了您现在尝试修复的代码?鉴于您的屏幕截图显示的输入 HTML,您了解
i.css('td > a::text')[n].extract()的作用吗? (ps:不鼓励截图代码) -
顶部代码是实际的网站代码,我的印象是我的循环会抓取 td 类的文本并给我合法名称和 ABN 等信息
标签: python web-scraping scrapy