过去几个小时我一直在研究这个问题,但无法弄清楚我做错了什么。当我使用scrapy shell中的选择器运行我的xpath状态时,该语句按预期工作。然而,当我尝试在我的蜘蛛中使用相同的语句时,我得到一个空集。有谁知道我做错了什么?
from scrapy.spider import Spider
from scrapy.selector import Selector
from TFFRS.items import Result
class AthleteSpider(Spider):
name = "athspider"
allowed_domains = ["www.tffrs.org"]
start_urls = ["http://www.tffrs.org/athletes/3237431/",]
def parse(self, response):
sel = Selector(response)
results = sel.xpath("//table[@id='results_data']/tr")
items = []
for r in results:
item = Result()
item['event'] = r.xpath("td[@class='event']").extract()
items.append(item)
return items
答案 0 :(得分:2)
当蜘蛛查看时,您的网址不包含任何内容。要调试此类问题,您应该在解析方法中使用scrapy.shell.inspect_response,使用它如下:
from scrapy.shell import inspect_response
class AthleteSpider(Spider):
# all your code
def parse(self, response):
inspect_response(response)
然后当你做
scrapy crawl <your spider>
你将从蜘蛛中获得一个shell。你应该这样做:
In [1]: view(response)
这将显示此特定响应,因为它会查找此特定蜘蛛。
答案 1 :(得分:0)
尝试使用HtmlXPathSelector提取xpath。
从http
部分删除start_urls
。表id也是您未在xpath中正确输入的内容。尝试使用inspect元素为要抓取的数据获取正确的xpath。
还考虑从docs:
更改函数名称警告
编写爬网蜘蛛规则时,请避免使用parse作为回调 CrawlSpider使用parse方法本身来实现其逻辑。 因此,如果您覆盖解析方法,则爬行蜘蛛将不再存在 工作
答案 2 :(得分:0)
Scrapy蜘蛛必须采用特定的方法;示例包括:parse
和start_requests
,但docs中还有其他人
因此,如果您没有为此实施这些方法,那么您将遇到问题。在我的情况下问题是我有一个拼写错误,我的函数名称是 start_request 而不是 start_requests !
所以要确保你的骨架是这样的:
class MySpider(scrapy.Spider):
name = "name"
allowed_domains = ["https://example.com"]
start_urls = ['https://example.com/']
def start_requests(self):
#start_request method
def parse(self, response):
#parse method