python爬取网页的内层页_用python的requests模块爬取上海地区链家二手房数据

import re

import requests

from bs4 import BeautifulSoup

import get_allurls#import自定义模块

from get_allurls import *

import pandas as pd

from pandas import Series,DataFrame

import numpy as np

from numpy import random

def parse_url():

info_db=DataFrame()

all_urls=get_allurls.get_allurl()

for url in all_urls:

info={}

res=requests.get(url)#

if res.status_code==200:

html=res.content#响应内容

soup=BeautifulSoup(html,'html.parser')

#该网站的html代码中有的标识为空,字典赋值会出现报错IndexError: list index out of range

#加上try.....except 错误机制跳过空值

try:

#获取标题

title=soup.select('.main')[0].text

#获取房屋总价(单位万)

total_price=soup.select('.total')[0].text#输出如:'775'

#获取房屋单价(单位元)

price=soup.select('.unitPriceValue')[0].text#输出如:'85147元/平米'

#获取房屋名称及所属区

s=soup.find_all('div',attrs={'class':'fl l-txt'})[0]

##返回的s格式如下

##

s=re.findall('

##返回的s格式如下

##['上海房产网',

##'上海二手房',

##'静安二手房',

##'大宁二手房',

##'上海滩大宁城(公寓)二手房']

name=re.findall('>(.*?)<',s[-1])[0]#将s继续规整,得到name,'上海滩大宁城(公寓)二手房'

district=re.findall('>(.*?)<',s[2])[0]#'静安二手房'

info['title']=title#标题

info['name']=name#小区名称

info['district']=district#所在区

info['total_price']=total_price#房屋总价

info['price']=total_price#单价

#获取房屋基本信息

basic_info=re.findall("""房屋户型.*?|

所在楼层.*?|

建筑面积.*?|

户型结构.*?|

套内面积.*?|

建筑类型.*?|

房屋朝向.*?|

建筑结构.*?|

装修情况.*?|

梯户比例.*?|

配备电梯.*?

""",str(soup('li')),re.VERBOSE)#re.VERBOSE参数可以将正则表达式写成多行,并且自动忽略空格,此处一定要加上该参数。

#输出的basic_info列表格式如下:

#['房屋户型3室2厅1厨1卫',

#'所在楼层中楼层 (共23层)',

#'建筑面积91.02㎡',

#'户型结构暂无数据',

#'套内面积暂无数据',

#'建筑类型板楼',

#'房屋朝向南',

#'建筑结构钢混结构',

#'装修情况精装',

#'梯户比例两梯三户',

#'配备电梯有']

basic_info_list=[]

for i in basic_info:

i=re.findall('>(.*?)<',i)[0]#对basic_info列表中的值进行规整

basic_info_list.append(i)

#规整后的basic_info_list格式如下:

#['3室2厅1厨1卫',

#'中楼层 (共23层)',

#'91.02㎡',

#'暂无数据',

#'暂无数据',

#'板楼',

#'南',

#'钢混结构',

#'精装',

#'两梯三户',

#'有']

info['house_type']=basic_info_list[0]#房屋户型

info['floor_loc']=basic_info_list[1]#所在楼层

info['house_area']=basic_info_list[2]#建筑面积

info['house_struc']=basic_info_list[3]#户型结构

info['real_area']=basic_info_list[4]#套内面积

info['archi_cate']=basic_info_list[5]#建筑类型

info['house_toward']=basic_info_list[6]#房屋朝向

info['archi_struc']=basic_info_list[7]#建筑结构

info['deco_condition']=basic_info_list[8]#装修情况

info['elevator_rate']=basic_info_list[9]#梯户比例

info['elevator_equip']=basic_info_list[10]#配备电梯

except IndexError:

continue

info_db=pd.concat([info_db,DataFrame(info,index=[1])],axis=0,ignore_index=True)#将字典转为DataFrame,循环concat

return(info_db)#返回DataFrame格式的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值