Scrapy爬取全站链接并获取HTTP状态码技术求助
解决Scrapy爬虫获取HTTP状态码的问题
嘿,你的思路方向是对的,只是没用到Scrapy Response对象里自带的状态码属性!我来帮你调整代码,让它同时输出链接和对应的HTTP状态码:
关键修改点
- Scrapy的
response对象自带status属性,直接调用就能拿到当前请求的HTTP状态码(比如200、404) - 你的
start_urls里的URL格式不对,需要补全http://或https://前缀,否则爬虫无法正常发起请求
修改后的完整代码
from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.contrib.linkextractors import LinkExtractor class someSpider(CrawlSpider): name = 'linkscrawl' allowed_domains = ['mysite.com'] # 修正start_urls的URL格式,添加http/https前缀 start_urls = ['https://mysite.com/'] rules = (Rule(LinkExtractor(), callback="parse_obj", follow=True), ) def parse_obj(self, response): # 从response中提取URL和状态码 current_url = response.url status_code = response.status # 格式化输出 print(f"URL: {current_url} | HTTP Status Code: {status_code}")
额外优化建议
如果你想把这些数据持久化保存(比如存成CSV或JSON文件),可以定义一个Scrapy Item类:
from scrapy.item import Item, Field class LinkStatusItem(Item): url = Field() status_code = Field()
然后在parse_obj里实例化Item并返回:
def parse_obj(self, response): item = LinkStatusItem() item['url'] = response.url item['status_code'] = response.status # 打印输出 print(f"URL: {item['url']} | HTTP Status Code: {item['status_code']}") return item
之后运行爬虫时用scrapy crawl linkscrawl -o link_statuses.csv就能把结果保存成CSV文件啦~
内容的提问来源于stack exchange,提问作者bhattraideb
相关产品推荐
相关产品推荐

