简单的⼀个爬⾍抓取案例:以链家⽹租房信息为例
我们⽤到的数据有时候不是现成的,需要从⽹上爬取。python提供了很好的爬⾍包,有requests、BeautifulSoup. scrapy。以前有
接触过爬⾍,但没有完整的实现⼀个案例,今天在七⽉在线上看到了⼀个⽼师关于数据获取和处理的视频,就想着拿个例⼦来练练⼿。
1、⾸先安装需要⽤到的包 requests 和 BeautifulSoup。Time库,负责设置每次抓取的
休息时间。
安装好后将这些库导⼊进来
import requests
import time
from bs4 import BeautifulSoup
2、抓取和解析页⾯
bj表⽰城市
zufang 是频道名称
pg3是页⾯码
我们要抓取的是北京的租房频道,所以前⾯的部分不会变,属于固定部分,后⾯的页⾯码需要在1-100间变化,属于可变部分。将URL分为
两部分,前⾯的固定部分赋值给url,后⾯的可变部分使⽤for循环遍历页⾯。
#设置列表页的固定部分
url = "/zufang/"
#设置页⾯页的可变部分
page = ("pg")
为了防⽌被封ip,所以我们需要在http请求中设置⼀个头部信息,头部信息⽹上有很多现成的,可以查看。同时也可以设置多个ip代理号,
代理号可以在某宝上买到。
#设置请求头部信息
headers = {'User-Agent':'Mozilla/5.0 (Windows T 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-T3XZDQXxvGsM9k9ZZSnikW2Yds4s&wd=&eqid=c3435a7
我们使⽤for循环⽣成1-100的数字,转化格式后于前⾯的URL固定部分拼成要抓取的URL。设置每个1秒,将抓取的页⾯保存到html中
#循环抓取列表页信息
#由于抓取100的页内容,⽤时较长,所以本⽂就抓取了前50页的内容
for i in range(1,50):
if i == 1:
i = str(i)
a = (url + page + i +"/")
r = (url = a, headers = headers)
html = t
else:
i = str(i)
a = (url + page + i +"/")
r = (url = a, headers = headers)
html2 = t
html = html + html2
#每次间隔1秒
(1)
使⽤BeautifulSoup对页⾯进⾏解析
#解析抓取的页⾯内容
lj = BeautifulSoup(html,'')
完成解析后,就开始对页⾯中的关键信息进⾏提取了。我们提取租房的价格、⼩区,地址,户型,⾯积,价格更新时间等信息。
#提取房源价格
price = _all('div','price')
pr = []
for a in price:
totalPrice =
(totalPrice)
#提取房源⼩区信息
region = _all('span','region')
re = []
for b in region:
rrr = _text()
(rrr)
#提取房源户型信息
zone = _all('span','zone')
zo = []
for b in zone:
zzz = _text()
(zzz)
#提取房源⾯积信息
meters = _all('span','meters')
me = []
for b in meters:
mmm = _text()
(mmm)
#提取房源其他信息
other = _all('div','other')
oth = []
for c in other:
zufang = _text()
(zufang)
#提取更新时间
time = _all('div','price-pre')
ti = []
for d in time:
gengxin = _text()
(gengxin)
3、清洗数据并整理到数据表中
import pandas as pd
zufanginfo = ame({'xiaoqu':re,'huxing':zo,'mianji':me,'otherinfo':oth,'price':pr,'updatetime':ti})
()
对房源的其他信息进⾏切割操作
#对租房其他信息进⾏分列
otherinfo_split = ame((('/') for x in nfo),index = ,columns=['address','louceng','buildtime'])
#将分列后的信息拼接会原数据表中
zufanginfo = (zufanginfo,otherinfo_split,right_index=True,left_index=True)
#删除其中重复信息的列
('otherinfo',axis=1)
#导出成csv⽂件
_csv('D:/text_fenci/',header=True,index = False,sep = ',')
参考资料:
[1] 寒⼩阳⽼师在七⽉在线《数据分析班》讲的数据获取和处理这⼀节课内容
本文发布于:2023-05-22 14:59:39,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/falv/fa/86/94854.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |