首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scrapy AttributeError:响应内容不是文本

scrapy AttributeError:响应内容不是文本
EN

Stack Overflow用户
提问于 2020-10-16 00:41:09
回答 2查看 142关注 0票数 0

您好,我已经设置了以下项目

代码语言:javascript
复制
class DatosRUC_(scrapy.Spider):
    name = "datosRUC"
    start_urls = ['https://www.datosperu.org/']

    def start_requests(self):
        nombre = "datosRUC"
        rucs = [20100050359,
                20536742248
                ]
        for i in rucs:
            print(i)
            req = scrapy.Request(url='https://www.datosperu.org/buscador_empresas.php?buscar='+str(i))
            yield req

def parse(self, response):
    error = 'no_error'
    s = BeautifulSoup(response.text,'html.parser')
    ruc_num = s.find('input', {'id': 'buscar'}).get('value')
    company_link = s.findAll('div',class_="single-product")
    if len(company_link)>0:
        url_company= company_link[0].find('a',href=True)['href']
        url_final = 'https://www.datosperu.org/' + url_empresa
        yield {'ruc':ruc_num,'ruc_link':url_final,'error':error}
    else:
        error = 'no_ruc_found'
        url_final = ''
        yield {'ruc':ruc_num,'ruc_link':url_final,'error':error}

但是,如果我向其中一个链接发送请求,我会得到以下错误(例如):

代码语言:javascript
复制
2020-10-15 11:01:08 [scrapy.core.scraper] ERROR: Error downloading <GET https://www.datosperu.org/buscador_empresas.php?buscar=20536742248>
...
AttributeError: Response content isn't text
...

我正在使用代理池,但我不认为这是原因,因为我已经尝试了其他网站的链接,但没有任何问题。

我试着用scrapy-shell调试它,但当我发送(例如):

代码语言:javascript
复制
fetch(https://www.datosperu.org/buscador_empresas.php?buscar=20536742248)

我得到了同样的错误

EN

回答 2

Stack Overflow用户

发布于 2020-10-16 02:07:02

如果使用Scrapy不是必须的,你可以尝试get的requests库,它相当简单。

下面是使用requests对上面的代码进行的一次小的重写,它是有效的!

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

def get_request():
    rucs = [20100050359,
            20536742248
            ]
    for i in rucs:
        print(i)
        url = "https://www.datosperu.org/buscador_empresas.php?buscar="+str(i)
        r = requests.get(url)
        resp = parse(r)
        print(resp)

def parse(response):
    error = 'no_error'
    s = BeautifulSoup(response.content,'html.parser')
    ruc_num = s.find('input', {'id': 'buscar'}).get('value')
    company_link = s.findAll('div',class_="single-product")
    if len(company_link)>0:
        url_company= company_link[0].find('a',href=True)['href']
        url_final = 'https://www.datosperu.org/' + url_company
        return {'ruc':ruc_num,'ruc_link':url_final,'error':error}
    else:
        error = 'no_ruc_found'
        url_final = ''
        return {'ruc':ruc_num,'ruc_link':url_final,'error':error}

get_request()
票数 1
EN

Stack Overflow用户

发布于 2020-10-16 02:28:03

使用response.body -它是字节或response.text -它是字符串。不确定response.content是否存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64376137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档