如何使用很多网站进行网页编辑

时间:2018-03-12 23:04:02

标签: python web-scraping beautifulsoup

我想知道使用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' )

1 个答案:

答案 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()

通过这种方式,您的刮擦同时发生,从而大大加快了整个过程。