簡體   English   中英

使用requests.get(url)時沒有提供架構和其他錯誤

[英]No schema supplied and other errors with using requests.get(url)

我學習了python for webscraping。 該程序從巴西的制葯網站http://consultaremedios.com.br/中提取信息

我正在使用Ubuntu和MacOS。

這是我的代碼:

import requests
from bs4 import BeautifulSoup

#Send header
header = {'(Request-Line)': 'GET  /busca/termo=aromasin/p HTTP/1.1',
      'Host': 'consultaremedios.com.br',
      'User-Agent': 'Mozilla/5.0 (Macintosh Intel Mac OS X     10.14; rv:17.0) Gecko/17.0 Firefox/17.0',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en-US,en;q=0.5',
      'Accept-Encoding': 'gzip, deflate',
      'Connection': 'keep-alive',
      'Referer': 'https://consultaremedios.com.br/'}

#Get url and name of product
def get_http(url, nome_produto):
#Get url search. I'Il get the full url?
nome_produto = nome_produto.replace(' ', '+')
url = '{0}?termo={1}'.format(url, nome_produto)

try:
    return requests.get(url, headers=header, timeout=10)
except (requests.exceptions.HTTPError, requests.exceptions.RequestException,
            requests.excepetions.ConnectionError, requests.exceptions.Timeout) as e:
    print(r.headers)
#The error got here
    print(str(e))
except Exception as e:
    raise

def get_produtos(content):

soup = BeautifulSoup(content, 'lxml')
produtos = soup.find_all('h2', {'class': 'presentation-offer-info__description'})

lista_produtos = []
for produto in produtos:
    info_produto = [produto.a.get('href'), produto.a.string]
    lista_produtos.append(info_produto)
return lista_produtos

def get_http_page_produto(lista_produtos):

for produto in lista_produtos:

    try:
        r = requests.get(produto[0])
    except (requests.exceptions.HTTPError, requests.exceptions.RequestException,
            requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e:
        print(str(e))
        r = None
    except Exception as e:
        raise

    parse_page_produto(r.text, produto[0], produto[1])
    break

def parse_page_produto(content, url_produto, titulo):

soup = BeautifulSoup(content, 'lxml')
with open('letsgo.html', 'w') as f:
    f.write(content)



if __name__ == '__main__':

url = 'https://www.consultaremedios.com.br/busca/'
nome_produto = 'aromasin'

r = get_http(url, nome_produto)


if r:
    lista_produtos = get_produtos(r.text)
    print(lista_produtos)
    get_http_page_produto(lista_produtos)´´´

這里的錯誤:

[['/aromasin/25mg-caixa-com-30-drageas/p', 'Aromasin 25mg, caixa com 30 drágeas ']]
Invalid URL '/aromasin/25mg-caixa-com-30-drageas/p': No schema supplied. Perhaps you meant http:///aromasin/25mg-caixa-com-30-drageas/p?
Traceback (most recent call last):
File "/home/msr016/Documentos/Scrap2/scraper/54.py", line 75, in <module>
get_http_page_produto(lista_produtos)
File "/home/msr016/Documentos/Scrap2/scraper/54.py", line 51, in get_http_page_produto
parse_page_produto(r.text, produto[0], produto[1])
AttributeError: 'NoneType' object has no attribute 'text'´´´

看起來這樣不起作用:url ='{0}?termo = {1}'。format(url,nome_produto)

但我的語法看起來正確。

我試過在'get_url()'中插入do full url,比如'get_url(url),但不起作用。

我期待輸出

您是否需要將根URL連接到您的鏈接:

因此,編輯你使用/aromasin/25mg-caixa-com-30-drageas/p鏈接的地方,

'https://consultaremedios.com.br' + '/aromasin/25mg-caixa-com-30-drageas/p'

看起來這里的這一行需要改變:

info_produto = [produto.a.get('href'), produto.a.string]

至:

info_produto = ['https://consultaremedios.com.br' + produto.a.get('href'), produto.a.string]



import requests
from bs4 import BeautifulSoup

#Send header
header = {'(Request-Line)': 'GET  /busca/termo=aromasin/p HTTP/1.1',
      'Host': 'consultaremedios.com.br',
      'User-Agent': 'Mozilla/5.0 (Macintosh Intel Mac OS X     10.14; rv:17.0) Gecko/17.0 Firefox/17.0',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en-US,en;q=0.5',
      'Accept-Encoding': 'gzip, deflate',
      'Connection': 'keep-alive',
      'Referer': 'https://consultaremedios.com.br/'}

#Get url and name of product
def get_http(url, nome_produto):
#Get url search. I'Il get the full url?
    nome_produto = nome_produto.replace(' ', '+')
    url = '{0}?termo={1}'.format(url, nome_produto)

    try:
        return requests.get(url, headers=header, timeout=10)
    except (requests.exceptions.HTTPError, requests.exceptions.RequestException,
                requests.excepetions.ConnectionError, requests.exceptions.Timeout) as e:
        print(r.headers)
    #The error got here
        print(str(e))
    except Exception as e:
        raise

def get_produtos(content):

    soup = BeautifulSoup(content, 'lxml')
    produtos = soup.find_all('h2', {'class': 'presentation-offer-info__description'})

    lista_produtos = []
    for produto in produtos:
        info_produto = ['https://consultaremedios.com.br' + produto.a.get('href'), produto.a.string]
        lista_produtos.append(info_produto)
    return lista_produtos

def get_http_page_produto(lista_produtos):

    for produto in lista_produtos:

        try:
            r = requests.get(produto[0])
        except (requests.exceptions.HTTPError, requests.exceptions.RequestException,
                requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e:
            print(str(e))
            r = None
        except Exception as e:
            raise

        parse_page_produto(r.text, produto[0], produto[1])
        break

def parse_page_produto(content, url_produto, titulo):

    soup = BeautifulSoup(content, 'lxml')
    with open('C:/letsgo.html', 'w', encoding = 'utf-8') as f:
        f.write(content)



if __name__ == '__main__':

    url = 'https://www.consultaremedios.com.br/busca/'
    nome_produto = 'aromasin'

    r = get_http(url, nome_produto)


    if r:
        lista_produtos = get_produtos(r.text)
        print(lista_produtos)
        get_http_page_produto(lista_produtos)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM