鱼C论坛

 找回密码
 立即注册
查看: 1756|回复: 5

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

[复制链接]
发表于 2021-11-19 11:33:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


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[i]+','+quyu[i]+','+dizhi[i]+','+fangxing[i]+','+mianji[i]+','+junjia[i]+','+zongjia[i]+'\n')
        f.close()


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

索引超出范围怎么解决啊   求求了  新手不会搞
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-20 11:00:29 | 显示全部楼层
  1. import requests
  2. import parsel
  3. import time


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


  28. if __name__ == "__main__":
  29.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-20 14:12:07 | 显示全部楼层

大佬 可以告诉我怎么把总价、建筑面积、房型的平均数写出来吗
平均价格我做出来了 ,我按同样的方式写总价的平均数,就报这个错误
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[0]
print(data['区域'])
#去掉元/㎡部分
data['平均价格'] = data['平均价格'].str.split('元').str[0]
print(data['平均价格'])
#去掉前面的总价
data['总价'] = data['总价'].str.split('价').str[-1]
data['总价'] = data['总价'].str.split('(').str[0]
#删除数据中的缺失值
data = data.dropna(subset=['总价'])
print(data['总价'])
#转换为floa数据类型
data['平均价格'] = data['平均价格'].astype(int)
#删除总价中的价格待定列
data = data.drop(data[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)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

原始数据发一下,没有权限放你自己的网盘,然后分享链接出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

https://pan.baidu.com/disk/main? ... 8#/index?category=4
就这个数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-20 20:32:14 | 显示全部楼层
suchocolate 发表于 2021-11-20 19:07
原始数据发一下,没有权限放你自己的网盘,然后分享链接出来。

就这个数据
https://pan.baidu.com/disk/main? ... 8#/index?category=4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-17 13:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表