我对此特定页面的网页抓取存在问题,因为某种类型的业务会因此而到达。如果业务仅属于一个类别(示例中为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 -
######################################################
我只想保留第一类业务或类别而不是多个,并在"更多+"下放弃所有结果。链接。
提前感谢您的帮助和建议!!
答案 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