Python beautifulsoup抓取和收集数据

pgky5nke  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(120)

zillow中,我想获取无序列表中的每一项,然后转到特定的类:

"StyledPropertyCardDataWrapper-c11n-8-84-3__sc-1omp4c3-0 bKpguY property-card-data"

字符串
在那里我可以得到的价格,地址和链接创建3个不同的列表,包括每个想要的细节。我得到的只是空毯子
试过这个:

all_tags = soup.select(selector='body ul')
print(all_tags)

all_li_tags = [tags.findall('li') for tags in all_tags]
print(all_li_tags)


还有很多其他的变化:(
尝试创建这3个不同的列表,包括地址,价格和链接到财产

6tqwzwtp

6tqwzwtp1#

标记为selenium,我假设你会得到完整的源文本,你可以用它来选择你的元素,如下所示(通过常量id或标签选择元素,并尽量避免动态标识符,如类名):

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

driver = webdriver.Chrome(ChromeDriverManager(version='114.0.5735.90').install())

driver.get(url)

soup = BeautifulSoup(driver.page_source)

data = []

for e in soup.select('#grid-search-results article'):
    data.append({
        'address': e.address.text,
        'condition': e.span.text,
        'link': e.a.get('href') if e.a.get('href').startswith('https') else 'https://www.zillow.com'+e.a.get('href')
    })

data

字符串

  • 请记住,这将只选择第一页的信息,你需要迭代所有以下结果页,如果你想刮更多然后前41 itmes.*

此外,与其选择不同的列表,不如选择更结构化的存储形式,如dict,它可以很容易地转换为dataframe,...:

[{'address': '1190 Mission at Trinity Place | 1190 Mission St, San Francisco, CA',
  'price': '$2,199+ 1 bd',
  'link': 'https://www.zillow.com/apartments/san-francisco-ca/1190-mission-at-trinity-place/5XjVtb/'},
 {'address': '1188 Mission at Trinity Place | 1188 Mission St, San Francisco, CA',
  'price': '$2,099+ 1 bd',
  'link': 'https://www.zillow.com/apartments/san-francisco-ca/1188-mission-at-trinity-place/5XjN4q/'},
 {'address': 'Soma at 788 | 788 Harrison St, San Francisco, CA',
  'price': '$2,767+ 1 bd',
  'link': 'https://www.zillow.com/apartments/san-francisco-ca/soma-at-788/5XkGzw/'},...]


另一种方法是访问API的JSON请求,可以检查:JSONDecodeError: Expecting value: line 1 column 1 (char 0) or giving incorrect data

相关问题