问提来了这个attributeerror要怎么解决
python3.76
pycharm2020.3.5
# -*-coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive'
}
xingzhengqu_cn = ['锦江', '青羊', '武侯', '高新', '成华', '金牛', '天府新区', '高新西', '双流', '温江', '郫都', '龙泉驿', '新都', '彭州', '简阳', '青白江', '都江堰', '天府新区南区', '邛崃', '大邑', '蒲江', '新津', '金堂', '崇州']
xingzhengqu = ['jinjiang', 'qingyang', 'wuhou', 'gaoxin7', 'chenghua', 'jinniu', 'tianfuxinqu', 'gaoxinxi1', 'shuangliu', 'wenjiang', 'pidou', 'longquanyi', 'xindou', 'pengzhou', 'jianyang', 'qingbaijiang', 'doujiangyan', 'tianfuxinqunanqu', 'qionglai', 'dayi', 'pujiang', 'xinjin', 'jintang', 'chongzhou1']
def get_url(url, page): # url为区域名,page为页码
# 获取网站所有源码
html = requests.get(url + '/pg%s' % str(page), headers=headers).text
# 获取每一条租房信息
table = BeautifulSoup(html, 'lxml').find('div', {'class': 'con-box'}).find_all('li', {'data-el': 'zufang'})
# 再定义一个变量,用以查找每个行政区最大的页码数
table_2 = BeautifulSoup(html, 'lxml')
# 使用正则找到最大页码数
pattern = re.compile('"totalPage":(.*?),".*?')
last_page = re.findall(pattern, str(table_2))
# 下面三个信息直接用bs4不方便,故使用正则来查找
pattern_mianji = re.compile("(.*?)平米.*?")
pattern_quyu = re.compile("(.*?)租房")
pattern_updatetime = re.compile("(.*?)\s更新")
# 这里用字典存储所有的信息
result = []
# 循环,以获取当页每一条租房信息的所有信息
for li in table:
# item存储每一条租房的所有信息
item = dict()
item[u'网站'] = li.find('a').get('href')
item[u'房屋描述'] = li.find('img').get('alt')
item[u'小区'] = li.find('div', {'class': 'where'}).find('a').get_text().replace('\xa0', '')
item[u'房型'] = li.find('div', {'class': 'where'}).find_all('span')[1].get_text().replace('\xa0', '')
item[u'面积'] = re.findall(pattern_mianji, li.find('div', {'class': 'where'}).find_all('span')[3].get_text())[0]
item[u'朝向'] = li.find('div', {'class': 'where'}).find_all('span')[4].get_text()
item[u'地区'] = re.findall(pattern_quyu, li.find('div', {'class': 'other'}).find('a').get_text())[0]
item[u'楼层'] = li.find('div', {'class': 'con'}).get_text().split('/')[1]
item[u'年限'] = li.find('div', {'class': 'con'}).get_text().split('/')[2]
item[u'价格'] = li.find('div', {'class': 'price'}).find('span', {'class': 'num'}).get_text()
item[u'更新时间'] = re.findall(pattern_updatetime, li.find('div', {'class': 'price-pre'}).get_text())[0]
item[u'看房人数'] = li.find('div', {'class': 'square'}).find('span', {'class': 'num'}).get_text()
result.append(item)
# 返回所有租房信息与最大页码
return result, last_page
def get_quyu_data(area, x): # area为行政区中文名,x是英文名,也就是网址后缀
url = "https://cd.lianjia.com/zufang/%s" % area
page = 1
# 从第一个函数获取最大页码
last_page = get_url(url, page)[1]
# 定义一个空的DataFrame
df = pd.DataFrame()
# 一直循环,直到页码达到最大,跳出
while True:
try:
result = get_url(url, page)[0]
except:
print("failed")
break
df = df.append(pd.DataFrame(result))
page += 1
if page > int(''.join(last_page)):
break
df['区域'] = '%s' % x
return df
def main():
# 根据自己的需要将DataFrame列排序
column = ['房屋描述', '区域', '地区', '小区', '房型', '面积', '楼层', '朝向', '价格', '年限', '更新时间', '看房人数', '网站']
frame = pd.DataFrame()
for i in range(len(xingzhengqu)):
quyu = get_quyu_data(xingzhengqu[i], xingzhengqu_cn[i])
frame = frame.append(quyu)
# 列排序
frame = frame.reindex(columns=column)
# 因为每一个区域的索引都是从1开始,所以重新设置索引
frame.index = range(len(frame))
frame.to_csv("lianjia_guangzhou.csv")
if __name__ == '__main__':
main()
就这个attributeerror不知道该如何修改,是哪里的代码需要修改吗
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
不要将python代码文件命名为python预留字,模块名等。
原因
python代码在编译后会生成以pyc为文件名后綴的字节码文件,该字节码文件会经过python解释器来生成机器码文件来运行。当再次运行python文件时,解释器会直接调用该pyc的字节码文件运行直到py文件发生改变(解释器运行时会对比pyc的生成时间和py的修改时间)
这种问题一般是自己定义的py文件的名称跟引用的模块名有冲突,检查一下目录下是否有自己定义的特殊名字的py文件,修改py文件名即可。