Python 3 - 在网页抓取中删除不必要的结果

时间:2018-04-30 17:01:17

标签: python string web-scraping

我对此特定页面的网页抓取存在问题,因为某种类型的业务会因此而到达。如果业务仅属于一个类别(示例中为Pharmacy),则这些说明正常工作:



# import libraries
from urllib.request import urlopen
from bs4 import BeautifulSoup

quote_page = ['http://www.paginasamarillas.com.ar/buscar/q/farmacia/p-1/']
print (quote_page)

data = []
	
for pg in quote_page:
	page = urlopen(pg)
	soup = BeautifulSoup(page, 'html.parser')

	# Search company name and business type
	nombreBox = soup.find('div', attrs={'class':'t1 business-name', 'itemprop':'name'})
	tipoBox = soup.find('div', attrs={'class':'business-categories'})
	
	# Clean Results
	nombre = nombreBox.text.strip()
	tipo = tipoBox.text.strip()
	# tipo = tipo.split(" ")[0] # Tried with split and print only first word but is not working

	
	# Record results on array
	data.append((nombre, tipo))
	print (nombre, tipo)




#####################  RESULTS #######################

['http://www.paginasamarillas.com.ar/buscar/q/farmacia/p-1/']
Farmacia Iphais Farmacias
________^______ ____^____
 Company Name    BZ type
######################################################  

但是,有些业务不仅仅属于一个类别,还有一个"更多+"链接以下结果的更多详细信息:

#####################  RESULTS #######################

['http://www.paginasamarillas.com.ar/buscar/q/farmacia/p-1/'] 
Farmacia Zimerman Farmacias  #Starting here there are more business kind I don´t want it

 Perfumerias                                                                                                                                                                                                                                                                             mas +                                                                                                                   menos -     

    ###################################################### 

我只想保留第一类业务或类别而不是多个,并在"更多+"下放弃所有结果。链接。

提前感谢您的帮助和建议!!

1 个答案:

答案 0 :(得分:0)

在business-categories元素中,有一个" a"存储第一个特征的标记。您可以在tipoBox中搜索此元素,然后将其打印出来。

tipoBox = soup.find('div', attrs={'class':'business-categories'})
first_element = tipoBox.find('a')

我注意到目前你的程序只打印网站上的第一个列表。假设您想循环浏览网站上的所有列表,我是如何重写您的程序以获取企业名称和第一个描述:

  for pg in quote_page:
    page = urlopen(pg)
    soup = BeautifulSoup(page, 'html.parser')

    business = soup.find('ul', class_='businesses')
    links = business.find_all('li', class_='business')

    data = []
    for link in links:
        nombreBox = link.find('div', attrs={'class':'t1 business-name', 'itemprop':'name'})
        category = link.find('div', attrs={'class':'business-categories'})
        first_element = category.find('a')
        data.append((nombreBox.text.strip(), first_element.text.strip()))

    return data