1 回答
TA贡献1853条经验 获得超6个赞
看起来您正在执行许多 find_all 操作,然后将它们拼接在一起。我的建议是做一个 find_all 然后迭代它。当所有数据都在一个地方时,它可以更容易地构建数据框的列。
我已更新以下代码以成功提取链接而不会出错。对于任何代码,都有多种方法可以执行相同的任务。这可能不是最优雅的,但它确实完成了工作。
import requests
from bs4 import BeautifulSoup
import pandas as pd
r = requests.get('https://www.raywhite.com/contact/?type=People&target=people&suburb=Sydney%2C+NSW+2000&radius=50%27%27&firstname=&lastname=&_so=contact', headers = {'User-agent': 'Super Bot 9000'})
soup = BeautifulSoup(r.text, 'html.parser')
get_cards = soup.find_all("div",{"class":"card horizontal-split vcard"})
agent_list = []
for item in get_cards:
name = item.find('li', class_='agent-name').text
position = item.find('li', class_='agent-role').text
phone = item.find('li', class_='agent-officenum').text
link = item.find('li', class_='agent-name').a['href']
try:
email = item.find('a',class_='val withicon')['href'].replace('mailto:','')
except:
email = 'No Email address'
agent_list.append({'name':name,'position':position,'email':email,'link':link})
df = pd.DataFrame(agent_list)
以上是我为创建数据框而放在一起的一些示例代码。这里的关键是做一个 find_all"class":"card horizontal-split vcard"}
希望有所帮助。
干杯,亚当
添加回答
举报