您好,我已经设置了以下项目
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}但是,如果我向其中一个链接发送请求,我会得到以下错误(例如):
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调试它,但当我发送(例如):
fetch(https://www.datosperu.org/buscador_empresas.php?buscar=20536742248)我得到了同样的错误
发布于 2020-10-16 02:07:02
如果使用Scrapy不是必须的,你可以尝试get的requests库,它相当简单。
下面是使用requests对上面的代码进行的一次小的重写,它是有效的!
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()发布于 2020-10-16 02:28:03
使用response.body -它是字节或response.text -它是字符串。不确定response.content是否存在。
https://stackoverflow.com/questions/64376137
复制相似问题