我想从页面结构变化的几个页面中抓取数据,而不是完全不同,但不完全相同。我的代码只遍历len(d)== 7并跳过其他的所有页面,其中d是d = soup.findAll('span',class _ ='property _base-info__value')。 我如何获得所有页面?!是否有可能引入页面上不存在的变量然后给它们NA值?! 这是我的代码:
A=[]
B=[]
C=[]
D=[]
E=[]
F=[]
G=[]
H=[]
I=[]
J=[]
K=[]
L=[]
url =
['https://www.booli.se/annons/2272818','https://www.booli.se/annons/2082826']
import requests
from bs4 import BeautifulSoup
for page in url:
request = requests.get(page)
soup = BeautifulSoup(request.text,'lxml')
#
d = soup.findAll('span', class_='property__base-info__value')
if len(d)==7:
#
region=soup.findAll('span', itemprop='name')
[1].text.strip().encode('utf-8') ###region###
#
a = soup.findAll('span', class_='property__base-info__title__size')
ar = a[0].text.strip().encode('utf-8').split()
room=ar[0] ######Rooms#####
area=ar[2] #####Area#####
#
temp=[]
d = soup.findAll('span', class_='property__base-info__value')
for i in d:
i = i.text.strip()
temp.append(i)
#
full_date=temp[0].encode('utf-8')
import datetime as dt
date=dt.datetime.strptime(full_date, '%d %b %Y').strftime('%Y-%m-%d')
#
tempo = temp[1].split('\n')[0].encode('utf-8')
Utropspris=tempo.replace('kr','')
import re
estimate=re.sub(r'(\d)\s+(\d)', r'\1\2', Utropspris)
#
avgift=temp[2].encode('utf-8').replace('kr/m\xc3\xa5n','')
fee=re.sub('(?<=\d) (?=\d)', '',avgift) ####avgift####
#
apt=[]
lag=temp[3].encode('utf-8')
if lag=='L\xc3\xa4genhet':
apt='apartment' ######Property type##########
#
cost=temp[4].encode('utf-8').replace('kr/m\xc3\xa5n','')
#
floor=temp[5].encode('utf-8').replace('tr','')
#
year=temp[6].encode('utf-8') ###Year built####
#
test=soup.find('span', class_='property__base-info__sub-
value').text.strip().encode('utf-8').replace('kr/m\xc2\xb2','')
krm2=re.sub('(?<=\d) (?=\d)', '',test)
#
main=soup.find('span', class_='property__base-
info__title__price').text.strip().split('\n')[0].encode('utf-
8').replace('kr','')
price=re.sub('(?<=\d) (?=\d)', '',main) ####sold price####
#
A.append(region)
B.append(room)
C.append(area)
D.append(date)
E.append(estimate)
F.append(fee)
G.append(apt)
H.append(cost)
I.append(floor)
J.append(year)
K.append(krm2)
L.append(price)
更新(来自自我回答)
我可以改变限制。但它不会给我正确的输出。 len(d)==7
用于获取所有内容的完整信息。如果我把它设置为五,我可能得到一个房子:
room, area, cost(Driftskostnad), floor (Våning),estimated price (Utropspris)
和另一所房子:
room, area, fee (avgift), year built (Byggår), estimated price (Utropspris)
答案 0 :(得分:0)
如果我理解正确,您要求抓取您不确定存在的数据。 计算机是宇宙中最愚蠢的东西。
你说你的代码 ONLY 经过len(d)== 7的页面。你能设定另一个限制吗?
是否可以引入页面上不存在的变量 然后给他们NA值?!
是的,您可以使用简单if VARIABLE==None:
或仅if Variable:
检查元素(字段)是否存在(如果有任何数据应该返回true)
希望这能回答你的问题。您需要了解一些细节,以便我正确回答问题,编辑您的问题并做出回应。