我已经写了一个脚本来解析来自网页的所有移动商店名称。当我运行我的脚本时,我可以得到很少的它们。我如何才能从该页面中获取所有的姓名,此时姓氏为Parkway Mobile Home Park - Alabama
这是我到目前为止尝试过的:
import requests
from bs4 import BeautifulSoup
url = "replace with above link"
r = requests.get(url)
soup = BeautifulSoup(r.text,"lxml")
items = soup.select_one("table tr")
name = '\n'.join([item.get_text(strip=True) for item in items.select("td p strong") if "alabama" in item.text.lower()])
print(name)
输出结果如下:
Roberts Trailer Park - Alabama
Cloverleaf Trailer Park - Alabama
Longview Mobile Home Park - Alabama
发布于 2018-05-30 09:54:48
尝试使用html.parser
而不是lxml
。此外,尝试使用find_all('strong')
,而不是使用select_one('table tr')
。您还需要删除额外的空格和回车。
以下代码将返回预期的(491)条记录:
import re
import requests
from bs4 import BeautifulSoup
url = "http://www.chattelmortgage.net/Alabama_mobile_home_parks.html"
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
items = soup.find_all('strong')
name = '\n'.join([re.sub('\s{2,}', ' ', re.sub('[\r\n]', '', item.text)).strip() for item in items if 'alabama' in item.text.lower()])
print(name)
发布于 2018-05-30 07:57:32
页面的html非常差,所以它相当难看,但这是有效的:
import requests
from bs4 import BeautifulSoup
url = "http://www.chattelmortgage.net/Alabama_mobile_home_parks.html"
r = requests.get(url)
soup = BeautifulSoup(r.text,"html")
table = soup.find('table', attrs={'class':'tablebg, tableBorder'})
print([item.text.strip() for item in table.find_all("strong") if "alabama" in item.text.lower()])
https://stackoverflow.com/questions/50594392
复制相似问题