我吃饱了. 发表于 2021-11-19 11:33:51

大佬们 索引超出范围怎么弄啊



import requests
import parsel
import csv
import time
import random
for page in range(1,56 + 1):
    choice = random.randint(0,20)
    time.sleep(choice)
    print('======真正爬取第{}页数据====='.format(page))
    url='https://sz.fang.lianjia.com/loupan/pg{}/'.format(str(page))
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
    r=requests.get(url=url,headers=headers)
    print(r.status_code)
    html=r.text
    print(type(html))
    select = parsel.Selector(html)
    lis = select.css('.resblock-list.post_ulog_exposure_scroll.has-results')
    for li in lis:
      title = li.css('.resblock-name a::text').get()
      quyu = li.css('.resblock-location span::text').getall()
      quyu = '/'.join(quyu)
      dizhi = li.css('.resblock-location a::text').getall()
      mianji = li.css('.resblock-area span::text').get()
      fangxing = li.css('.resblock-room span::text').getall()
      fangxing = '/'.join(fangxing)
      junjia = li.css('.main-price span::text').get() + '元/㎡'
      zongjia = li.css('.resblock-price .second::text').get()
      #title_url = li.css('.title a::attr(href)').get()
      print(title,quyu,dizhi,fangxing,mianji,junjia,zongjia,sep='---')

      f=open('链家深圳网.csv','w',encoding='utf-8')
      f.writelines('名字'+','+'区域'+','+'地址'+','+'房型'+','+'建筑面积'+','+'均价'+','+'总价'+'\n')
      for i in range(len(quyu)):
            f.writelines(title+','+quyu+','+dizhi+','+fangxing+','+mianji+','+junjia+','+zongjia+'\n')
      f.close()


代码是这样的Traceback (most recent call last):
File "C:/tfm/爬虫1.py", line 34, in <module>
    f.writelines(title+','+quyu+','+dizhi+','+fangxing+','+mianji+','+junjia+','+zongjia+'\n')
IndexError: list index out of range

索引超出范围怎么解决啊   求求了新手不会搞

suchocolate 发表于 2021-11-20 11:00:29

import requests
import parsel
import time


def main():
    f = open('链家深圳网.csv', 'w', encoding='utf-8')# 打开文件,准备写入
    f.write('名字,区域,地址,房型,建筑面积,均价,总价\n')
    for page in range(1, 57):
      time.sleep(0.3)# 不用随机时间,0.3就可以
      print(f'======真正爬取第{page}页数据=====')
      url = f'https://sz.fang.lianjia.com/loupan/pg{page}/'
      headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
      r = requests.get(url=url, headers=headers)
      select = parsel.Selector(r.text)
      lis = select.css('.resblock-list.post_ulog_exposure_scroll.has-results')
      for li in lis:# 遍历lis,也就是说li只是一个楼盘的信息,所以以下这些变量就不用再循环了,只需要逐个写入到文件中。
            title = li.css('.resblock-name a::text').get()
            quyu = li.css('.resblock-location span::text').getall()
            quyu = '/'.join(quyu)
            dizhi = li.css('.resblock-location a::text').get()
            mianji = li.css('.resblock-area span::text').get()
            fangxing = li.css('.resblock-room span::text').getall()
            fangxing = '/'.join(fangxing)
            junjia = li.css('.main-price span::text').get() + '元/㎡'
            zongjia = li.css('.resblock-price .second::text').get()
            f.write(f'{title},{quyu},{dizhi},{fangxing},{mianji},{junjia},{zongjia}\n')
    f.close()


if __name__ == "__main__":
    main()

我吃饱了. 发表于 2021-11-20 14:12:07

suchocolate 发表于 2021-11-20 11:00


大佬 可以告诉我怎么把总价、建筑面积、房型的平均数写出来吗
平均价格我做出来了 ,我按同样的方式写总价的平均数,就报这个错误
pandas.core.base.DataError: No numeric types to aggregate

import pandas as pd
data=pd.read_csv('深圳新房1.csv')
#print(data)
#把区域分割只保留区域部分
data['区域'] = data['区域'].str.split('/').str
print(data['区域'])
#去掉元/㎡部分
data['平均价格'] = data['平均价格'].str.split('元').str
print(data['平均价格'])
#去掉前面的总价
data['总价'] = data['总价'].str.split('价').str[-1]
data['总价'] = data['总价'].str.split('(').str
#删除数据中的缺失值
data = data.dropna(subset=['总价'])
print(data['总价'])
#转换为floa数据类型
data['平均价格'] = data['平均价格'].astype(int)
#删除总价中的价格待定列
data = data.drop(data=='价格待定'].index)
#各区域房子的平均房价
data = data.groupby('区域')['建筑面积'].mean().round(2).reset_index()
data = data.sort_values('建筑面积',ascending=False)[:10]
#data = data.groupby('区域')['总价'].mean().round(2).reset_index()
#data = data.sort_values('总价',ascending=False)[:10]
print(data)
#print(data.shape)

suchocolate 发表于 2021-11-20 19:07:12

我吃饱了. 发表于 2021-11-20 14:12
大佬 可以告诉我怎么把总价、建筑面积、房型的平均数写出来吗
平均价格我做出来了 ,我按同样的方式写总 ...

原始数据发一下,没有权限放你自己的网盘,然后分享链接出来。

我吃饱了. 发表于 2021-11-20 20:29:29

suchocolate 发表于 2021-11-20 19:07
原始数据发一下,没有权限放你自己的网盘,然后分享链接出来。

https://pan.baidu.com/disk/main?from=oldversion&_at_=1637411240268#/index?category=4
就这个数据

我吃饱了. 发表于 2021-11-20 20:32:14

suchocolate 发表于 2021-11-20 19:07
原始数据发一下,没有权限放你自己的网盘,然后分享链接出来。

就这个数据
https://pan.baidu.com/disk/main?from=oldversion&_at_=1637411240268#/index?category=4
页: [1]
查看完整版本: 大佬们 索引超出范围怎么弄啊