我的Python爬虫代码示例(一)

我的Python爬虫代码示例(一)从链家网站爬虫石家庄符合条件的房源信息,并保存到文件,房源信息包括名称、建筑面积、总价、所在区域、套内面积等。其中所在区域、套内面积需要在详情页获取计算。主要使用了requests+BeautifulSoup第三方模块,具体使用方法可百度。第一版是2019年4月份写的,当前已失效。第二版是12月份写的。第一版:#!/usr/bin/pythonfrombs4impor…

大家好,又见面了,我是你们的朋友全栈君。

从链家网站爬虫石家庄符合条件的房源信息,并保存到文件,房源信息包括名称、建筑面积、总价、所在区域、套内面积等。其中所在区域、套内面积需要在详情页获取计算。

主要使用了requests+BeautifulSoup第三方模块,具体使用方法可百度。

第一版是2019年4月份写的,当前已失效。

第二版是12月份写的。

第一版

#!/usr/bin/python

from bs4 import BeautifulSoup
import requests

def getHouseList(url):
    house =[]
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}
    #get从网页获取信息
    res = requests.get(url,headers=headers)
    #解析内容
    soup = BeautifulSoup(res.content,'lxml')
    #房源title
    housename_divs = soup.find_all('div',class_='title')
    for housename_div in housename_divs:
        housename_as=housename_div.find_all('a')
        for housename_a in housename_as:
            housename=[]
            #标题
            housename.append(housename_a.get_text())
            #超链接
            housename.append(housename_a['href'])
            house.append(housename)
    huseinfo_divs = soup.find_all('div',class_='houseInfo')
    for i in range(len(huseinfo_divs)):
        info = huseinfo_divs[i].get_text()
        infos = info.split('|')
        #小区名称
        house[i].append(infos[0])
        #户型
        house[i].append(infos[1])
        #平米
        house[i].append(infos[2])
    #查询总价
    house_prices = soup.find_all('div',class_='totalPrice')
    for i in range(len(house_prices)):
        #价格
        price = house_prices[i].get_text()
        house[i].append(price)
    return house

#爬取房屋详细信息:所在区域、套内面积
def houseinfo(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}
    res = requests.get(url,headers=headers)
    soup = BeautifulSoup(res.content,'lxml')
    msg =[]
    #所在区域
    areainfos = soup.find_all('span',class_='info')
    for areainfo in areainfos:
        #只需要获取第一个a标签的内容即可
        area = areainfo.find('a')
        if(not area):
            continue
        hrefStr = area['href']
        if(hrefStr.startswith('javascript')):
            continue
        msg.append(area.get_text())
        break
    #根据房屋户型计算套内面积
    infolist = soup.find_all('div',id='infoList')
    num = []
    for info in infolist:
        cols = info.find_all('div',class_='col')
        for i in cols:
            pingmi = i.get_text()
            try:
                a = float(pingmi[:-2])
                num.append(a)
            except ValueError:
                continue
    msg.append(sum(num))
    return msg

#将房源信息写入txt文件
def writeFile(houseinfo):
    f = open('d:/房源.txt','a',encoding='utf8')
    # houseinfo.join('\n')
    f.write(houseinfo+'\n')
    f.close()

#主函数
def main():
    for i in range(1,100):
        print('-----分隔符',i,'-------')
        if i==1:
            url ='https://sjz.lianjia.com/ershoufang/hy1f2f5sf1l3l2l4a2a3a4/'
        else:
            url='https://sjz.lianjia.com/ershoufang/pg'+str(i)+'hy1f2f5sf1l3l2l4a2a3a4/'
        houses =getHouseList(url)
        for house in houses:
            link = house[1]
            if(not link.startswith('http')):
                continue
            mianji = houseinfo(link)
            #将套内面积、所在区域增加到房源信息
            house.extend(mianji)
            print(house)
            info = " ".join([str(x) for x in house])
            writeFile(info)

if __name__ == '__main__':
    main()

从链家网站查询到8849条房源信息,但是页面只能显示31(每页数量)*100(总页码)=3100条房源,其他没找到。

第二版:

获取某个小区的房源信息,并写入excel。

#!/usr/bin/python

from bs4 import BeautifulSoup
import requests
import xlwt

def getHouseList(url):
    house =[]
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}
    #get从网页获取信息
    res = requests.get(url,headers=headers)
    #解析内容
    soup = BeautifulSoup(res.content,'html.parser')
    #房源title
    housename_divs = soup.find_all('div',class_='title')
    for housename_div in housename_divs:
        housename_as=housename_div.find_all('a')
        for housename_a in housename_as:
            housename=[]
            #标题
            housename.append(housename_a.get_text())
            #超链接
            housename.append(housename_a.get('href'))
            house.append(housename)
    huseinfo_divs = soup.find_all('div',class_='houseInfo')
    for i in range(len(huseinfo_divs)):
        info = huseinfo_divs[i].get_text()
        infos = info.split('|')
        #小区名称
        house[i].append(infos[0])
        #户型
        house[i].append(infos[1])
        #平米
        house[i].append(infos[2])
    #查询总价
    house_prices = soup.find_all('div',class_='totalPrice')
    for i in range(len(house_prices)):
        #价格
        price = house_prices[i].get_text()
        house[i].append(price)
    return house

#爬取房屋详细信息:所在区域、套内面积
def houseinfo(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}
    res = requests.get(url,headers=headers)
    soup = BeautifulSoup(res.content,'html.parser')
    msg =[]
    #所在区域
    areainfos = soup.find_all('span',class_='info')
    for areainfo in areainfos:
        #只需要获取第一个a标签的内容即可
        area = areainfo.find('a')
        if(not area):
            continue
        hrefStr = area['href']
        if(hrefStr.startswith('javascript')):
            continue
        msg.append(area.get_text())
        break
    #根据房屋户型计算套内面积
    infolist = soup.find_all('div',id='infoList')
    num = []
    for info in infolist:
        cols = info.find_all('div',class_='col')
        for i in cols:
            pingmi = i.get_text()
            try:
                a = float(pingmi[:-2])
                num.append(a)
            except ValueError:
                continue
    msg.append(sum(num))
    return msg

#将房源信息写入excel文件
def writeExcel(excelPath,houses):
    workbook = xlwt.Workbook()
    #获取第一个sheet页
    sheet = workbook.add_sheet('git')
    row0=['标题','链接地址','户型','面积','朝向','总价','所属区域','套内面积']
    for i in range(0,len(row0)):
        sheet.write(0,i,row0[i])
    for i in range(0,len(houses)):
        house = houses[i]
        print(house)
        for j in range(0,len(house)):
            sheet.write(i+1,j,house[j])
    workbook.save(excelPath)

#主函数
def main():
    data = []
    for i in range(1,5):
        print('-----分隔符',i,'-------')
        if i==1:
            url ='https://sjz.lianjia.com/ershoufang/l2rs%E5%92%8C%E5%B9%B3%E4%B8%96%E5%AE%B6/'
        else:
            url='https://sjz.lianjia.com/ershoufang/pg'+str(i)+'l2rs%E5%92%8C%E5%B9%B3%E4%B8%96%E5%AE%B6/'
        houses =getHouseList(url)
        for house in houses:
            link = house[1]
            if(not link or not link.startswith('http')):
                continue
            mianji = houseinfo(link)
            #将套内面积、所在区域增加到房源信息
            house.extend(mianji)
        data.extend(houses)
    writeExcel('d:/house.xls',data)

if __name__ == '__main__':
    main()

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133817.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月7日 下午9:16
下一篇 2022年6月7日 下午9:16


相关推荐

  • 海思h264解码库

    海思h264解码库海思的dll,解码h264 解码后转出yuv12dll自己百度下载 hi_h264dec.dll  hi_h264dec_w.dll 调用方法:if(H264Dec.Hi264DecAU(_decHandle,pH264Data,frameLen,0,ref_decodeFrame,0)==0) pH264Data是h264帧的句柄,frameLen…

    2022年6月28日
    76
  • Mathpix | Typora | 实现快速公式编辑[通俗易懂]

    Mathpix | Typora | 实现快速公式编辑[通俗易懂]这篇文章是之前做过的一期视频的改进版本,写这个文章的原因有两个:1、mathpix的模式有所变化2、我发现了更简单的使用方法需要环境mathpixtyporawindows10使用介绍当我们遇到一个公式的时候,我们可以使用mathpix去截图获取其公式编码1、点击截图按钮,框出想要选择复制的公式2、选择好后,已自动copy好latex格式,手动选择copy也可3、打开typora,输入$$按回车,创建公式模块;也可以右键,插入公式4、将之前copy的latex

    2022年5月18日
    78
  • 【平面图理论】平面图学习笔记

    【平面图理论】平面图学习笔记我为什么现在要学平面图因为顺切HNOI2010遇到了平面图判定…————————————–线割分是我>w首先是一些定义:什么是平面图?对于一个图G=,如果能把G画在一个平面上,且画出的图的任意两条边除了V中的节点没有其他交点,则图G为平面图.平面图的面:对于一个平面图,由如果存在一些边围成的区域,且这个区域内不包含这个图的点和边,那么我们称这个区域为该平面图的一个面

    2022年5月25日
    35
  • Deepin手动分盘全攻略,从入门到实践,轻松掌握硬盘分区技巧,Deepin手动分盘全攻略,从入门到实践轻松掌握分区技巧

    Deepin手动分盘全攻略,从入门到实践,轻松掌握硬盘分区技巧,Deepin手动分盘全攻略,从入门到实践轻松掌握分区技巧

    2026年3月16日
    3
  • Python函数总结大全(函数定义,参数种类、返回值等)

    Python函数总结大全(函数定义,参数种类、返回值等)目录函数与函数式编程函数的定义函数与过程返回值与返回值类型前向引用内部 内嵌函数函数装饰器传递函数参数的种类位置参数参数默认值命名关键字参数关键字参数 others 便于函数功能的扩展任意的参数列表 others 解包参数列表解包参数列表函数与函数式编程函数是组织好的 可重复使用的 用来实现单一 或相关联功能的代码段 函数能提高应用的模块性 和代码的重复利用率 Python 提供了许多内建函数 比如 print 我们也可

    2026年3月16日
    2
  • P3P解决cookie跨域

    P3P解决cookie跨域P3P是什么P3P(PlatformforPrivacyPreferences)是W3C公布的一项隐私保护推荐标准,以为用户提供隐私保护。 P3P标准的构想是:Web站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如“本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等

    2025年6月2日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号