You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy报TypeError: to_bytes需str/bytes对象,传入NoneType的问题排查

Scrapy爬虫报错:TypeError: to_bytes must receive a str or bytes object, got NoneType

报错信息

TypeError: to_bytes must receive a str or bytes object, got NoneType.

爬虫脚本

# lbc_ads_to_scrap.py

import scrapy


class LbcAdsToScrapSpider(scrapy.Spider):
    name = 'lbc_ads_to_scrap'
    allowed_domains = ['aia-immobilier.fr']
    
    def start_requests(self):
        yield scrapy.Request(
            'https://aia-immobilier.fr/fr/',
            meta={
                'proxy':'85.135.67.143'
            }

        )

    def parse(self, response):
        yield {
            'balise_h1': response.xpath('//h1')
        }

完整错误栈

2024-01-04 17:31:36 [scrapy.core.scraper] ERROR: Error downloading <GET https://aia-immobilier.fr/fr/>
Traceback (most recent call last):
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\twisted\internet\defer.py", line 1656, in _inlineCallbacks
result = current_context.run(
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\twisted\python\failure.py", line 489, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\middleware.py", line 49, in process_request
return (yield download_func(request=request, spider=spider))
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\utils\defer.py", line 67, in mustbe_deferred
result = f(*args, **kw)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\handlers\__init__.py", line 75, in download_request
return handler.download_request(request, spider)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\handlers\http11.py", line 65, in download_request
return agent.download_request(request)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\handlers\http11.py", line 327, in download_request
agent = self._get_agent(request, timeout)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\handlers\http11.py", line 279, in _get_agent
proxyScheme, proxyNetloc, proxyHost, proxyPort, proxyParams = _parse(proxy)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\webclient.py", line 40, in _parse
return _parsed_url_args(parsed)
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\core\downloader\webclient.py", line 21, in _parsed_url_args
host = to_bytes(parsed.hostname, encoding="ascii")
File "C:\Users\kgonc\anaconda3\envs\scraping\lib\site-packages\scrapy\utils\python.py", line 107, in to_bytes
raise TypeError('to_bytes must receive a str or bytes '
TypeError: to_bytes must receive a str or bytes object, got NoneType

问题描述

已检查目标URL和代理地址,未发现明显问题,请求定位错误原因。


错误原因及解决方案

错误原因

Scrapy的代理配置必须包含协议头(http://或https://)。当前代理地址85.135.67.143缺少协议头,导致Scrapy内部解析代理URL时无法识别主机名(hostname),返回None,最终触发to_bytes的类型错误。

解决方案

在代理地址前添加协议头,若代理为HTTP协议则用http://,HTTPS协议则用https://,修改后的start_requests方法如下:

def start_requests(self):
    yield scrapy.Request(
        'https://aia-immobilier.fr/fr/',
        meta={
            'proxy':'http://85.135.67.143'
        }
    )

如果代理需要指定端口,需一并添加(例如http://85.135.67.143:8080),否则会使用对应协议的默认端口。


内容的提问来源于stack exchange,提问作者kévin Goncalves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:47:12