我想知道使用beautifulsoup提高代码性能的最佳方法是什么。
这是我的网站代码示例。(我有其他网站的其他文件)。
#script apenas para Auto e Moto
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen, Request
urls=["https://www.aquario.pt/pt/produtos/car-audio/page/1&nrows=36","https://shoparts.pt/"]
headers = {'User-Agent':'Mozilla/5.0'} #Definir o agente como Mozilla para nao ser bloqueado o acesso
def makesoup(url):
req = Request(url, headers=headers)
connection = urlopen(req)
html = connection.read()
page = soup(html,"html.parser")
connection.close()
return page
def aquariocaraudio(page): #site aquario->Categoria Auto E Moto->Car Audio
#number=page.nav
#number=number.find_all("a")
#number=number[-1]
#number=int(number['data-page'])
for i in range(1,6):
url = "https://www.aquario.pt/pt/produtos/car-audio/page/%i&nrows=36" % (i)
req = Request(url, headers = {'User-Agent':'Mozilla/5.0'})
connection = urlopen(req) #Cria a coneção com o site
html = connection.read()
connection.close()
page = soup(html,"html.parser")
products=page.findAll("div",{"class":"prod-list col-md-4 col-sm-6 col-xs-12"})
print("PAGE: %i\n"% (i))
for produto in products:
link='https://www.aquario.pt/' + produto.a['href']
nome=produto.a['title']
imagem=produto.a['style']
imagem=imagem.replace("background-image: url(","")
imagem=imagem.replace("\);","")
imagem=imagem=imagem.replace("'","")
precoinicial=produto.findAll("span",{"class":"old"})
precoinicial=precoinicial[0].text
precopromocao=produto.findAll("span",{"class":"pvp"})
precopromocao=precopromocao[0]
precopromocao=precopromocao.text
print("Nome: " + nome + '\n' + 'Imagem: ' + imagem + '\n' + 'Link: ' + link + '\n' + 'Preco inicial: ' + precoinicial + '\n' + 'Preco Promocao ' + precopromocao + '\n' )
答案 0 :(得分:1)
我建议您在python中使用多处理库,通过并行提出请求来加速代码:
import multiprocessing from pool
p = Pool(60) # In this case you are estimating 60 urls
records = p.map(makesoup, url_list) #url_list is a list of all of your urls
p.terminate()
p.join()
通过这种方式,您的刮擦同时发生,从而大大加快了整个过程。