Scrapy Shell返回值正常但运行爬虫无输出问题求助
问题排查及解决方案
1. 核心问题:start_urls中的URL参数格式错误
你代码中填写的起始URL里,参数分隔符被错误添加了双引号,变成了"&",正确的分隔符应该是纯&。错误的URL会导致服务器无法正确识别请求参数,返回的页面不包含航班数据:
# 错误写法 start_urls = [ 'https://www.fly540.com/flights/nairobi-to-mombasa?isoneway=0"&"currency=KES"&"depairportcode=NBO"&"arrvairportcode=MBA"&"date_from=Fri%2C+10+Dec+2021"&"date_to=Fri%2C+17+Dec+2021"&"adult_no=1"&"children_no=0"&"infant_no=0"&"searchFlight="&"change_flight=' ] # 修正写法(直接复制你给出的目标数据源URL即可) start_urls = [ 'https://www.fly540.com/flights/nairobi-to-mombasa?isoneway=0¤cy=KES&depairportcode=NBO&arrvairportcode=MBA&date_from=Fri%2C+10+Dec+2021&date_to=Fri%2C+17+Dec+2021&adult_no=1&children_no=0&infant_no=0&searchFlight=&change_flight=' ]
你在Scrapy Shell中测试时用的是正确的URL,所以能正常提取数据,爬虫运行时用了错误的URL,自然拿不到结果。
2. 潜在问题:代码缩进错误
Python是缩进敏感语言,你贴出的代码中,name属性、start_urls属性、parse方法都没有正确缩进在FlightsSpider类内部,会导致Scrapy无法正确识别爬虫的配置和解析逻辑:
# 修正后的完整代码 import scrapy class FlightsSpider(scrapy.Spider): # 所有属性和方法都要缩进4个空格,处于class内部 name = "flights" start_urls = [ 'https://www.fly540.com/flights/nairobi-to-mombasa?isoneway=0¤cy=KES&depairportcode=NBO&arrvairportcode=MBA&date_from=Fri%2C+10+Dec+2021&date_to=Fri%2C+17+Dec+2021&adult_no=1&children_no=0&infant_no=0&searchFlight=&change_flight=' ] def parse(self, response): # 可添加这行调试,确认返回状态码为200 print("响应状态码:", response.status) for flight in response.css('div.fly5-flights.fly5-depart.th div.fly5-results table.table tr'): yield { 'departureAirport': flight.css('td span.flfrom::text')[0].get() }
3. 其他可能:反爬拦截
如果修正上面两个问题后还是拿不到数据,大概率是Scrapy默认的User-Agent被网站拦截了,你可以在项目的settings.py中修改USER_AGENT配置为普通浏览器的UA:
# settings.py中添加配置 USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
内容的提问来源于stack exchange,提问作者dennis
相关产品推荐
相关产品推荐

