300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python爬虫实战:BeautifulSoup库requests库-抓取链家网广州二手房信息

Python爬虫实战:BeautifulSoup库requests库-抓取链家网广州二手房信息

时间:2019-06-14 00:28:02

相关推荐

Python爬虫实战:BeautifulSoup库requests库-抓取链家网广州二手房信息

BeautifulSoup的中文文档:/software/BeautifulSoup/bs4/doc.zh/

最近学会了python的简单爬虫,就抓取一下链家网的二手房信息小试牛刀~

总结写在前头:

看URL结构→看提取信息的源代码→爬取并存进dataframe→清洗,变成能用的数据→写进CSV

会简单的使用BeautifulSoup库和requests库

爬取某一个网页的某一个信息得知道他的源代码

merge用来粘合两个dataframe

del用来删除dataframe的某一列

str(int)用来将数字转化为字符串,且‘’+‘’用于快速连接字符串

(获取字符串这里仍存在疑问)

1.所用到的库:

import requestsimport time #负责设置每次抓取的休息时间,速度太快会被封IPfrom bs4 import BeautifulSoupimport warnings import pandas as pd

2.了解抓取网页的结构

url:/ershoufang/ (第一页)

/ershoufang/pg2/ (第二页之后)

gz为城市名

ershoufang(二手房)为众多分区之一

pgX/为显示当前为第几页,网站共显示100页

3.设置头部信息或添加代理

可以防止频繁访问被封IP

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11','Accept':'text/html;q=0.9,*/*;q=0.8','Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3','Accept-Encoding':'gzip','Connection':'close','Referer':'/link?url=_andhfsjjjKRgEWkj7i9cFmYYGsisrnm2A-TN3XZDQXxvGsM9k9ZZSnikW2Yds4s&wd=&eqid=c3435a7d00146bd600000003582bfd1f'}`

4.网页抓取

for i in range(1,101):if i == 1:i=str(i)a=(url+page+i+'/') #字符串可以用‘+’连接r=requests.get(url=a,headers=headers)html=r.contentelse:i=str(i)a=(url+page+i+'/')r=requests.get(url=a,headers=headers)html2=r.contenthtml = html + html2#每次间隔1秒time.sleep(1)

5.网页解析

soup=BeautifulSoup(html,html.parser') #用BeautifulSoup对网页进行解析,必须选择哪种解析器,不表明会出错

6.信息提取

下面我们分别对房源的总价,房源信息和关注度三部分进行提取。查看网页的源代码,将符合进行提取

把页面div标签中class=priceInfo的部分提取出来,并使用for循环将其中每个房源的总价数据存在tp中。

`“

price=soup.find_all(“div”,”totalPrice”)

tp=[]

for a in price:

totalPrice=a.span.string

tp.append(totalPrice)

房源信息存在hi中![查看房子信息的标签和class](https://img-/083029394?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAwMDUyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

information=soup.find_all(“div”,”houseInfo”)

hi=[]

for i in information:

im=i.get_text()

hi.append(im)

![查看关注信息的便签和class](https://img-/08305244?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAwMDUyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)关注度信息存在fi中

follow=soup.find_all(“div”,’followInfo’)

fi=[]

for i in follow:

fo=i.get_text()

fi.append(fo)

6.清洗数据------将爬取到的信息制作成数据表house=pd.DataFrame({"total":tp,"houseInfo":hi,"follow":fi}) #这里用的是字典

先传到CSV看一下爬取的数据,需要对houseInfo和follow进行分列

```对房源信息进行分列house_info_split=pd.DataFrame((x.split('|') for x in house["houseInfo"]),columns=["place",'door_model','area','toward','zhuangxiu','elevator','qita'])原本观察房源信息数据是应分成6列,但爬取100页数据后出错,原因是有几个房源信息在其中多加了一处“独栋别墅”,见下图

#对关注度信息进行分列follow_split=pd.DataFrame((i.split("/") for i in house["follow"]),columns=['followers','times','days'])#将数据分列后,将其添加进数据表,并删除多余的列house=pd.merge(house,house_info_split,right_index=True, left_index=True)#merge函数不改变两个传入数据表house=pd.merge(house,follow_split,right_index=True, left_index=True)del house["follow"] #删除dataframe某一列的快捷方法del house['houseInfo']

7.最后,将数据表写进CSV

house.to_csv("lianjiawang.csv",encoding="GBK")

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。