ValueError: invalid hostname:
记录一次Scrapy报错的解决方式- 今天用scrapy抓取了一个站点报此错,用百度直接搜索报错关键词,搜出来的结果啥跟啥,虽然国内的互联网大环境不如国外的,但是我希望国内的大型论坛站点搜索的资料有参考作用价值,很多灌水的知识很浪费检索时间,好了感慨就说到这了。
正文看这里
- 原因分析
首先 你要排除格式写错的原因
, 比如单双引号的问题(如果在IDE里面我认为这些不可能会出现)
我用scrapy抓取的一个新的站点,报ValueError: invalid hostname这种错误我之前没怎么碰到过,第一反应就是把spider里面的 allowed_domains = [] 换成 [’*’],但还是不行。
- 我点开抓取链接,发现chrome提示是一个不安全的链接,我突然就想到是不是SSL证书验证不通过,最后证明还真是。
解决方式
- 首先在requests里面不验证SSL很简单, 直接加一个参数,如下:
import requests
# 以前12306的SSL证书通过不了验证 现在貌似可以了
res = requests.get("https://www.12306.cn", verify=False)
- 那么在scrapy里面该如何去做了? 也是加一些设置参数如下
- 找到scrapy的配置文件
settings.py
在里面添加 几行配置文件就可以
# 不验证SSL证书
DOWNLOAD_HANDLERS_BASE = {
'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler',
}
DOWNLOAD_HANDLERS = {
'https': '你的项目名.custom.downloader.handler.https.HttpsDownloaderIgnoreCNError',
}
或者可以在单独的爬虫文件里面 设置
比如我的项目文件叫wgPython,爬虫文件叫 fantastic,就可以去配置文件里面添加
文件路径 wgPython/spiders/fantastic.py
class FantasticSpider(scrapy.Spider):
name = 'Fantastic'
allowed_domains = ['*']
start_urls = ["http://demo.com"]
custom_settings = {
#'DOWNLOAD_DELAY': 270, # 下载延迟 270秒
# 'LOG_LEVEL': 'DEBUG', # 打印日志等级
# 下面两个设置 关闭SSL证书验证
"DOWNLOAD_HANDLERS_BASE": {
'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler',
},
"DOWNLOAD_HANDLERS": {
'https': 'wgPython.custom.downloader.handler.https.HttpsDownloaderIgnoreCNError',
},
}
下面是我搜索到结果的链接 https://stackoverflow.com/questions/32950694/disable-ssl-certificate-verification-in-scrapy
- 关于stackoverflow国内打开慢问题,可以解决,参考我转载的那个github https://blog.youkuaiyun.com/wgPython/article/details/85231457
- stackoverflow这个站点内容质量一直很高。很多东西都只知其然,不知其所以然,一点点学。