我正在尝试从网页上抓取的网页中提取数据,我觉得这很难。我尝试了soup.get_Text()
,但它没有用,因为它只是连续返回单个字符而不是整个字符串对象。
提取名称很简单,因为您可以使用'b'-tag
访问它,但是例如提取街道(“AmVogelwäldchen2”)证明是非常困难的。我可以尝试从单个字符组合地址,但这似乎过于复杂,我觉得必须有一个更简单的方法来做到这一点。也许有人有更好的主意。哦,不介意奇怪的功能,我退回汤,因为我尝试了不同的方法。
import urllib.request
import time
from bs4 import BeautifulSoup
#Performs a HTTP-'POST' request, passes it to BeautifulSoup and returns the result
def doRequest(request):
requestResult = urllib.request.urlopen(request)
soup = BeautifulSoup(requestResult)
return soup
def getContactInfoFromPage(page):
name = ''
straße = ''
plz = ''
stadt = ''
telefon = ''
mail = ''
url = ''
data = [
#'Name',
#'Straße',
#'PLZ',
#'Stadt',
#'Telefon',
#'E-Mail',
#'Homepage'
]
request = urllib.request.Request("http://www.altenheim-adressen.de/schnellsuche/" + page)
request.add_header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
request.add_header("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0")
soup = doRequest(request)
#Save Name to data structure
findeName = soup.findAll('b')
name = findeName[2]
name = name.string.split('>')
data.append(name)
return soup
soup = getContactInfoFromPage("suche2.cfm?id=267a0749e983c7edfeef43ef8e1c7422")
print(soup.getText())
答案 0 :(得分:0)
您可以依赖字段标签并获取next sibling的文字。
从中创建一个漂亮的可重用功能将使其更加透明和易于使用:
def get_field_value(soup, field):
field_label = soup.find('td', text=field + ':')
return field_label.find_next_sibling('td').get_text(strip=True)
用法:
print(get_field_value(soup, 'Name')) # prints 'AWO-Seniorenzentrum Kenten'
print(get_field_value(soup, 'Land')) # prints 'Deutschland'