在抓取给定网站时,我在打印重定向网址(301 重定向后的新网址)时遇到了一些问题。我的想法是只打印它们而不刮掉它们。我当前的代码是:
import scrapy
import os
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name = 'rust'
allowed_domains = ['example.com']
start_urls = ['http://example.com']
rules = (
# Extract links matching 'category.php' (but not matching 'subsection.php')
# and follow links from them (since no callback means follow=True by default).
# Extract links matching 'item.php' and parse them with the spider's method parse_item
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
def parse_item(self, response):
#if response.status == 301:
print response.url
但是,这不会打印重定向的 url。任何帮助将不胜感激。
谢谢。
要解析任何不是 200 的响应,您需要执行以下操作之一:
项目范围
您可以设置设置HTTPERROR_ALLOWED_CODES = [301,302,...]
in settings.py
文件。或者,如果您想为所有代码启用它,您可以设置HTTPERROR_ALLOW_ALL = True
反而。
蜘蛛范围
Add handle_httpstatus_list
参数给你的蜘蛛。在你的情况下类似:
class MySpider(scrapy.Spider):
handle_httpstatus_list = [301]
# or
handle_httpstatus_all = True
请求范围
你可以设置这些meta
您的请求中的关键信息handle_httpstatus_list = [301, 302,...]
or handle_httpstatus_all = True
对全部:
scrapy.request('http://url.com', meta={'handle_httpstatus_list': [301]})
要了解更多信息,请参阅HttpError中间件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)