day1:python学习爬虫抓取与解析:链家网案例
2017-10-17 21:17
751 查看
day1:python学习爬虫抓取与解析:链家网案例
实验目的:爬取链家网的一些内容工具:requests和BeautifulSoup
1.准备工作
编写爬虫前的准备工作,我们需要导入用到的库,这里主要使用的是requests和BeautifulSoup两个。还有一个Time库,负责设置每次抓取的休息时间。import requests import time from bs4 import BeautifulSoup
2.抓取列表页
首先,抓取前需要了解一下目标网站URL结构,链家网的二手房列表页面共有100个。URL结构为https://hz.lianjia.com/ershoufang/pg2/ 其中
- hz表示城市
- /ershoufang/是频道名称
- pg2是页面码。
举个例子,我们现在要抓取的是杭州的二手房频道,所以前面的部分不会变,属于固定部分,后面的页面码需要在1-100间变化,属于可变部分。将URL分为两部分,前面的固定部分赋值给url,后面的可变部分使用for循环遍历页面。
#设置列表页URL的固定部分 url='http://bj.lianjia.com/ershoufang/' #设置页面页的可变部分 page=('pg')
这里,我们最好在http请求中设置一个头部信息,否则很容易被封ip。头部信息网上有很多现成的,也可以使用httpwatch等工具来查看。
#设置请求头部信息 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':'http://www.baidu.com/link?url=_andhfsjjjKRgEWkj7i9cFmYYGsisrnm2A-TN3XZDQXxvGsM9k9ZZSnikW2Yds4s&wd=&eqid=c3435a7d00146bd600000003582bfd1f' }
我们使用for循环生成1-100的数字,转化格式后与前面的URL固定部分拼成要抓取的URL。这里我们设置每两个页面间隔0.5秒。抓取到的页面保存在html中。
#循环抓取列表页信息 for i in range(1,100): if i == 1: i=str(i) a=(url+page+i+'/') r=requests.get(url=a,headers=headers) html=r.content else: i=str(i) a=(url+page+i+'/') r=requests.get(url=a,headers=headers) html1=r.content html = html + html1 #每次间隔1秒 time.sleep(1)
到这里,页面抓取的工作就完成了,内容在html中
3.页面解析
使用BeautifulSoup对页面进行解析#解析抓取的页面内容 wp=BeautifulSoup(html,'html.parser')
完成页面解析后就可以对页面中的关键信息进行提取了。下面我们分别对房源的总价,房源信息和关注度三部分进行提取。
房源的总价
把页面div标签中class=priceInfo的部分提取出来,并使用for循环将其中每个房源的总价数据存在tp中。
#提取房源总价 price=wp.findall('div','priceInfo') tp=[] for a in price: totalPrice=a.span.string tp.append(totalPrice)
房源信息和关注度
提取房源信息和关注度的方法与提取房源价格的方法类似,房源信息存储在hi中,关注度存储在fi中。#提取房源信息 houseInfo=lj.find_all('div',attrs={'class':'houseInfo'}) hi=[] for b in houseInfo: house=b.get_text() hi.append(house) #提取房源关注度 followInfo=lj.find_all('div',attrs={'class':'followInfo'}) fi=[] for c in followInfo: follow=c.get_text() fi.append(follow)
#查看一下提取出来的数据 for item in hi: print item
4.清洗数据
我们将之前爬取到的信息进行汇总,并导入pandas之中生成数据表。便于后面的分析。
import pandas as pd house=pd.dataframe('TotalPrice':tp,'houseinfo':hi,'followinfo':fi) #导入pandas库 import pandas as pd #创建数据表 house=pd.DataFrame({'totalprice':tp,'houseinfo':hi,'followi 4000 nfo':fi}) #查看数据表的内容 house.head()
这里很多信息是糊在一块的,不能直接使用,所以咱们再做一些数据提取和清洗的工作。如房源信息,在表中每个房源的小区名称,户型,面积,朝向等信息都在一个字段中,无法直接使用。需要先进行分列操作。这里的规则比较明显,每个信息间都是以竖线分割的,因此我们只需要以竖线进行分列即可。
#对房源信息进行分列 houseinfo_split = pd.DataFrame((x.split('|') for x in house.houseinfo),index=house.index,columns=['小区','户型','面积','朝向','装修','电梯']) #查看分列结果 houseinfo_split.head()
#对房源关注度进行分列 followinfo_split = pd.DataFrame((x.split('/') for x in house.followinfo),index=house.index,columns=['guanzhu','daikan','fabu'])
#将分列结果拼接回原数据表 house=pd.merge(house,houseinfo_split,right_index=True, left_index=True) #将分列后的关注度信息拼接回原数据表 house=pd.merge(house,followinfo_split,right_index=True, left_index=True) house.head()
相关文章推荐
- Python爬虫框架Scrapy 学习笔记 10.1 -------【实战】 抓取天猫某网店所有宝贝详情
- Python写爬虫——抓取网页并解析HTML
- Python爬虫基础学习,从一个小案例来学习xpath匹配方法
- 机器学习完整过程案例分布解析,python代码解析
- Python写爬虫——抓取网页并解析HTML
- Python爬虫(入门+进阶)学习笔记 1-6 浏览器抓包及headers设置(案例一:爬取知乎)
- Python写爬虫——抓取网页并解析HTML
- python爬虫学习(1)__抓取煎蛋图片
- 萌新的Python学习日记 - 爬虫无影 - 使用BeautifulSoup + css selector 抓取自己想要网页内容
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
- Python爬虫(入门+进阶)学习笔记 1-8 使用自动化神器Selenium爬取动态网页(案例三:爬取淘宝商品)
- 2018年网易深度学习图像实习校招编程题(100%案例通过)python解析
- Python3学习(34)--简单网页内容抓取(爬虫入门一)
- Python3爬虫抓取TP官网案例图片
- Python爬虫--抓取单一页面上的图片文件学习
- python学习:(1)爬虫(抓取博客园新闻)
- Python爬虫(入门+进阶)学习笔记 1-4 使用Xpath解析豆瓣短评
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- 萌新的Python学习日记 - 爬虫无影 - 添加headers抓取动态网页内容:TripAdvisor(上)
- Python爬虫框架Scrapy 学习笔记 10.2 -------【实战】 抓取天猫某网店所有宝贝详情