我了解了用于网络抓取的python。该程序从巴西的制药网站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()'中插入完整的url,就像'get_url(url)一样,但是不起作用。
我希望输出
答案 0 :(得分:0)
是否需要将根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)