python - Python 3 - 删除网络抓取的不必要结果
问题描述
对于某种类型的业务,我有一个关于此特定页面的网络抓取问题,结果有不止一种类型的业务到达。如果业务仅属于一个类别(例如药房),则这些说明可以正常工作:
# 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 -
######################################################
我只想保留第一种业务或类别而不是多个,并丢弃“更多+”链接下的所有结果。
提前感谢您的帮助和建议!!
解决方案
在业务类别元素中,有一个存储第一个特征的“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
推荐阅读
- python - 带有 JSON 定位器类的参考文件
- c# - Xamarin / SQLite:数据库中的更新双打
- rxjs - 为什么这个使用 concat-operator 的小 rxjs-code-snippet 会抛出错误?
- spring - Log4j2 未从 EAR 中的外部类路径加载
- jackson - 钥匙斗篷。使用 Admin API 放置 RealmRepresentation 给出“没有字符串参数构造函数/工厂方法来反序列化字符串值”
- sql - 使用子查询查找给定日期最大值的行
- php - 用 curl 在 html 中找到每一个
- r - 如何针对两个变量聚合/group_by?
- c++ - OpenCV - 如何在灰度图像上应用 Kmeans?
- excel - VBScript:Workbooks.Open - 不打开电子表格