首页 > 其他 > 详细

beautifulsoup爬取链家网数据直接写入excel里

时间:2021-05-09 11:19:37      阅读:29      评论:0      收藏:0      [点我收藏+]

  代码(仅限用于学习交流,未经允许不得用于商业获取非法利益):技术分享图片

技术分享图片
import requests 
from bs4 import BeautifulSoup
import time
import csv

def get_url(start_num,end_num):
url_list = [] #建立一个空列表,用于存放二级网址
headers={
‘UserAgent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘
}
url_page = [‘https://sh.lianjia.com/ershoufang/pg{}a7ep500/‘.format(num) for num in range(start_num,end_num+1)] #这是列表解析式,逻辑为根据起始和终止页码,拼接出每一个一级网址,放入一个列表中,待用
n = 0
for page in url_page: #遍历每个一级网址
n+=1
print(‘正在抓取第{}页链接‘.format(n)) #输出正在抓取的是第几个链接
time.sleep(0.5)
page_data = requests.get(page,headers=headers)
soup = BeautifulSoup(page_data.text,‘lxml‘)
urls = soup.select(‘body > div.content > div.leftContent > ul > li > div.info.clear > div.title > a‘)

for u in urls:
url_list.append(u.get(‘href‘))
return url_list #函数返回二级网址列表

def craw_inf(url_list): #创建爬虫函数
file = open(‘./lianjia_python.csv‘,‘a+‘,encoding=‘gbk‘) #创建并打开csv文件,参数为文件路径,打开方式ab+: 二进制附加读写方式打开,gbk编码
writer = csv.writer(file)
writer.writerow([‘name‘,‘price‘,‘area_price‘,‘area‘,‘lng‘,‘lat‘]) #写入表头
inf_all = [] #新建一个空列表,存放每一条爬取的数据,用于方便写入文件
headers={
‘UserAgent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘} #同样先定义一个http请求头
n = 0 #设定一个计数变量
for url in url_list: #遍历每个二级网址
n+=1
print(‘正在抓取第{}个房源‘.format(n)) #输出正在抓取的是第几个房源信息
time.sleep(0.5)
web = requests.get(url,headers=headers) #用requests库的get方法访问二级网址,参数为链接和请求头
soup = BeautifulSoup(web.text,‘lxml‘) #创建一个实例化BeautifulSoup类,类为二级网址的页面
namel = soup.select(‘body > div.sellDetailHeader > div > div > div.title > h1‘) #selector选择器获取房源名称
pricel = soup.select(‘body > div.overview > div.content > div.price > span.total‘) #selector选择器获取总价
area_pricel = soup.select(‘body > div.overview > div.content > div.price > div.text > div.unitPrice > span‘) #selector选择器获取每平米价格
areal = soup.select(‘body > div.overview > div.content > div.houseInfo > div.area > div.mainInfo‘) #获取面积
lng = soup.get_text().split("resblockPosition:‘")[1].split(‘,‘)[0] #根据页面结构获取经度
lat = soup.get_text().split("resblockPosition:‘")[1].split(‘,‘)[1].split("‘")[0] #根据页面结构获取纬度
for name,price,area_price,area in zip(namel,pricel,area_pricel,areal): #遍历获取的每一个信息,提取具体的值
data_list = [name.get_text(),price.get_text(),area_price.get_text(),area.get_text(),lng,lat] #把值以列表形式存入一个变量
inf_all.append(data_list) #把数据添加入开始设定的空列表中
file = open(‘./lianjia_python.csv‘,‘a+‘,encoding=‘gbk‘)#打开csv文件
writer = csv.writer(file)#对csv进行写入
for row in inf_all:
writer.writerow(row)#写入爬取的数据
inf_all = [] #清空列表,待存放下一个数据

def main():
url_list = get_url(1,15)
craw_inf(url_list)

if __name__ == ‘__main__‘:
main()
技术分享图片

 

beautifulsoup爬取链家网数据直接写入excel里

原文:https://www.cnblogs.com/zzj666/p/14747287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!