【发布时间】:2019-04-13 17:30:37
【问题描述】:
我是初学者,这个论坛上的答案非常宝贵。我正在使用 Python 3 和 Beautiful Soup 通过循环页码从同一网站上的多个网页中抓取(非表格)数据。它有效,但我不断收到 AttributeError: 'NoneType' 对象在第一次迭代后没有属性 'text'。
这是我迄今为止尝试过的代码:
import requests
from bs4 import BeautifulSoup
import csv
import lxml
# Lists to store the scraped data in
addresses = []
geographies = []
rents = []
units = []
availabilities = []
# Scraping all pages
pages_url = requests.get('https://www.rent.com/new-york/tuckahoe-apartments')
pages_soup = BeautifulSoup(pages_url.text, 'html.parser')
list_nums = pages_soup.find('div', class_='_1y05u').text
print(list_nums)
pages = [str(i) for i in range(1,8)]
for page in pages:
response = requests.get('https://www.rent.com/new-york/tuckahoe-apartments?page=' + page).text
html_soup = BeautifulSoup(response, 'lxml')
# Extract data from individual listing containers
listing_containers = html_soup.find_all('div', class_='_3PdAH')
print(type(listing_containers))
print(len(listing_containers))
for container in listing_containers:
address = container.a.text
addresses.append(address)
geography = container.find('div', class_='_1dhrl').text
geographies.append(geography)
rent = container.find('div', class_='_3e12V').text
rents.append(rent)
unit = container.find('div', class_='_2tApa').text
units.append(unit)
availability = container.find('div', class_='_2P6xE').text
availabilities.append(availability)
import pandas as pd
test_df = pd.DataFrame({'Street' : addresses,
'City-State-Zip' : geographies,
'Rent' : rents,
'BR/BA' : units,
'Units Available' : availabilities
})
print(test_df)
这是输出:
240 Properties
<class 'bs4.element.ResultSet'>
30
Street City-State-Zip Rent BR/BA Units Available
0 Quarry Place at Tuckahoe 64 Midland PlaceTuckahoe, NY 10707 $2,490+ 1–2 Beds • 1–2 Baths 2 Units Available
Traceback (most recent call last):
File "renttucktabletest.py", line 60, in <module>
availability = container.find('div', class_='_2P6xE').text
AttributeError: 'NoneType' object has no attribute 'text'
我正在寻找的结果是 pandas 数据框中的所有 240 个列表与上面输出中显示的第一次迭代完全相同。有人可以帮助解决这个错误吗?将不胜感激。谢谢!
【问题讨论】:
-
这意味着在你解析的 HTML 中没有
div这个类。 -
鉴于随机名称,我假设这些是生成和随机化的。您还有其他方法可以找到正确的 div 吗?
-
第一个问题列表是page 5 上的“Rivervue”。没有“单位”
div -
谢谢 Martijn,是的,当我阅读这些答案时,很明显有些 div 没有信息,这似乎是问题所在。至于随机的名字,名字不是“随机的”,而是经常变化,不知道是不是随机的
标签: python-3.x pandas web-scraping beautifulsoup