链家网页爬虫_爬虫实战1-----链家二手房信息爬取

2023-11-16

经过一段机器学习之后,发现实在是太枯燥了,为了增添一些趣味性以及熟练爬虫,在之后会不定时的爬取一些网站

旨在熟悉网页结构--尤其是HTML的元素,ajax存储,json;熟练使用pyspider,scrapy两大框架;掌握基本的requests库,re正则匹配,urllib库,Beautifulsoup,css,pyquery 选择器的使用,pandas库的辅助;mongodb,csv,xlsx的存储,redis分布式爬虫;简单的反爬技巧

本篇作为实战的第一篇,爬取了链家二手房的信息,一些思路借鉴了网上的框架结构,并非纯粹原创,特此声明,站在巨人的肩膀上眺望

该篇我自己实践学习到的、需要注意的内容如下

本项目实例的知识点有

1. format 和 迭代yield 的使用

2. 三大解析工具的使用 XPath, beautifulsoup,pquery

3.关于变签选取,beautifulsoup 的select 方法返回的是列表,需要格外注意, 且用select 来选择class 标签的时候,只取 空格前边,class 等号后边的,比如62行

4.如何将字典信息转化为pd.DataFrame

比如,dict={'a':'1','b':'2','c':'3'}

直接使用data=pd.DataFrame(dict)则会报错:ValueError: If using all scalar values, you must pass an index

如何解决呢?比较好的方法介绍两种

第一种为:data=pd.DataFrame(dict,index=[0])

第二种为:pd.DataFrame(list(idct.items()) 代码位置117行

5.当有多个列表同时需要转化为dataframe 的时候,可以将所有的字典全部的存放到一个列表当中,随后直接用pd.dataframe

所对应的代码和注释如下:

class lianjiaspider(object):

def __init__(self):

self.home_url='http://bj.lianjia.com/'#链家首页的链接

self.auth_url='https://passport.lianjia.com/cas/login?service=http%3A%2F%2Fbj.lianjia.com%2F'#用户的登陆界面,登陆后为链家首页的界面

self.zaishou_url='https://su.lianjia.com/ershoufang/pg{}/'

self.headers=headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Cache-Control': 'max-age=0',

'Connection': 'keep-alive',

'Content-Type': 'application/x-www-form-urlencoded',

'Host': 'su.lianjia.com',

'Referer': 'https://su.lianjia.com/chengjiao/',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36',

'Upgrade-Insecure-Requests': '1',

'X-Requested-With': 'XMLHttpRequest',

}

def main_url(self,page):#生成在售房屋每一页的URL

#r=requests.get(self.home_url)

#return r.text

for next_page in range(1,int(page)):

yield self.zaishou_url.format(next_page)#,可以用于迭代

def detail_sall_url(self):

user_num = input('请输入你想要的主页的页数:')

detail_url_list = []

for i in self.main_url(str(int(user_num)+1)):

try:

response=requests.get(i,headers=self.headers)

if response.status_code==200:#一定不能加引号啊,不然怎么都匹配不到的

html=response.text

soup=bp(html,'lxml')

detail_a_label=soup.select('.clear .noresultRecommend')#返回的是一个列表

for each_a_label in detail_a_label:

detail_url_list.append(each_a_label['href'])#获得标签,然后获取属性href ,并依次取出详情页的标签把他放在一个列表当中

except requests.ConnectionError as e:

print ('error:', e.args)

return detail_url_list

def parse_detail_url(self,detail_url_list):#用于解析详情页

info_concat=[]

for each_detail_url in detail_url_list:

response_detail=requests.get(each_detail_url)

if response_detail.status_code==200:

html_detail_url=response_detail.text

info={}#存为字典/json 形式

soup=bp(html_detail_url,'lxml')

info1=soup.select('.title .main')#获取含有标题的标签的列表

for j in info1:

info['出售房屋标题']=j.get_text()#获取标题

info2=soup.select('.price .total')#获取房屋价格

for p in info2:

info['总价']=p.string + '万'

info3 = soup.select('.unitPriceValue') # 获取房屋每平方均价

for unit_price in info3:

info['平方售价'] = unit_price.get_text()

info4 = soup.select('.room') # 获取厅室

for property in info4:

info['房屋属性'] = property.get_text()

info5 = soup.select('.area')

for areas in info5:

info['面积'] = areas.get_text()

info6 = soup.select('.type')

for areas in info6:

info['朝向'] = areas.get_text()

info_concat.append(info)

else:

print ('error:', requests.ConnectionError)

return info_concat

def save_to_xlsx(self,detail_url_list): #用于将数据存储到 excel 当中

pd.DataFrame(self.parse_detail_url(detail_url_list)).to_excel('链家二手房.xlsx', sheet_name='链家二手房信息')

def main():

lianjia=lianjiaspider()#实例化

detail_url_list=lianjia.detail_sall_url()

lianjia.save_to_xlsx(detail_url_list)

if __name__=='__main__':

main()

代码选取5页的内容爬取并存储结果如下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链家网页爬虫_爬虫实战1-----链家二手房信息爬取 的相关文章

  • 人工智能的数学基石:揭秘人工智能十大数学基础

    人工智能 Artificial Intelligence 简称AI 正以惊人的速度改变着我们的生活 然而 要实现智能的机器 离不开数学的支持 本文将带你深入探索人工智能的数学基础 揭示AI背后的数学奥秘 一 线性代数 Linear Alge
  • 函数对象(重载括号运算符)

    函数对象 重载括号运算符 函数对象超出普通函数的概念 函数对象可以有自己的状态 在使用stl中 经常需要将函数对象作为算法的输入参数 或实例子化一个容器的输入参数
  • NodeJs之邮件(email)发送

    NodeJs之邮件 email 发送 一 介绍与需求 1 1 介绍 1 Nodemailer简介 Nodemailer是一个简单易用的Node js邮件发送插件 github地址 Nodemailer的主要特点包括 支持Unicode编码
  • SpringBoot+Shiro+LayUI权限管理系统项目-9.核心知识点总结

    1 说明 本篇讲一下本项目几个重要的知识点 详细看源码 文章下方捐赠或QQ联系捐赠获取 2 Shiro如何设置密码加密算法 1 在shiro配置文件中添加 Bean public HashedCredentialsMatcher hashe
  • 协方差矩阵的几何解释

    A geometric interpretation of the covariance matrix http www visiondummy com 2014 04 geometric interpretation covariance
  • Java线程:新特征-阻塞栈

    本文转载至 http lavasoft blog 51cto com 62575 222530 对于阻塞栈 与阻塞队列相似 不同点在于栈是 后入先出 的结构 每次操作的是栈顶 而队列是 先进先出 的结构 每次操作的是队列头 这里要特别说明一
  • 构建OpenCV和Raspberry Pi物体视觉追踪

    平移和倾斜伺服设备可帮助摄像机使用视觉自动跟踪颜色对象 OpenCV是免费的 可用于学术和商业用途 它具有C C Python和Java接口 并支持Windows Linux Mac OS iOS和Android 在我的系列OpenCV教程
  • scanf("%d\n",&num)中的\n是很特别的

    这是上篇博文 http blog csdn net u010412719 article details 48324799 中遇到的问题 详细原因明天再总结 总之 因为自己这样写了 花了很长时间才把这个bug调通 在scanf里 n 很特别
  • 小程序margin-bottom在IOS里面不起作用的解决方法

    margin bottom 是页面标签底部的元素属性 例如view中的定义按钮 如果想要距离底部有20rpx 按照常规写法margin bottom 20rpx 但是小程序用margin bottom在IOS手机出现失效问题 如何解决这个问
  • appuim+python常遇到的问题

    appuim python常遇到的问题 appuim使用过程中常见的问题 import time 一 内嵌H5定位 1 在web自动化中我们会遇见frame的问题 在遇见这些内嵌的标签后我们需要做的就是切换窗口 那么在app自动化测试也有类
  • Kotlin和Java混合开发必读:基本的互操作

    在使用Kotlin和Java混合开发的时候 涉及到一些基本的互操作 一 属性的读写 1 Kotlin自动识别Java的属性的Getter和Setter 2 Java操作kotlin属性可以通过Getter和Setter的方式 二 空安全类型
  • 面试官问:微服务的4种部署策略有哪些,什么区别?

    在项目迭代的过程中 不可避免需要 上线 上线对应着部署 或者重新部署 部署对应着修改 修改则意味着风险 目前有很多部署发布的技术 这儿将常见的做一个总结 上面所说难免有些抽象 举一个情景例子 加入你是微博项目负责人员 现在新版本较原来的老版
  • VScode解压版升级

    按照提示 下载最新的解压版 下载后解压文件夹 然后将旧的的解压版删除 不要替换 是删除之前的解压版 然后将新的解压后的文件粘贴到原来的位置 当然 如果你要换位置也是可以的 解压版很随意 很绿色的 之前的插件也是会完全保留的 包括登录信息
  • C# 中 Console.WriteLine 常见的几种形式及其用法差异

    在 C 的 Console WriteLine 方法中 有多种重载形式可以用于不同的输出需求 下面是常见的几种形式及其用法差异 输出字符串 Copy code Console WriteLine Hello World 这是最简单的用法 直
  • Unity --- 基本键鼠操作

    1 我们对于键盘和鼠标的点击操作相当于在输入数据 这些输入的数据都会被存储到对应的数据缓存区中供程序读取和调用 而我们所谓的游戏程序中的键鼠操作其实就是当我们通过键盘输入了特定数据之后 游戏程序马上从缓存区中读取到这个数据 并通过这个输入的
  • axure怎么存html文件怎么打开,axure 保存html文件怎么打开

    2 回答 2020 08 18 浏览 71 分类 绘图建模 回答 1 谷歌内核的浏览器需要安装Axure的插件才能访问 2 火狐浏览器 好像可以 与IE浏览器 3 可以用本机搭建一个服务器 让人家访问你的IP 任何浏览器都可以 1 回答 2
  • cobalt strike木马免杀

    0x001 针对powershell免杀 工具 Invoke Obfuscation 操作实例 1 利用CS生成powershell木马 2 进入invoke Obsfuscation文件 使用powershell命令执行 3 利用powe
  • CUDA Samples:Vector Add

    以下CUDA sample是分别用C 和CUDA实现的两向量相加操作 参考CUDA 8 0中的sample C ProgramData NVIDIA Corporation CUDA Samples v8 0 0 Simple 并对其中使用
  • 《深度学习入门》鱼书学习笔记(代码可运行)

    X 前言 X 1环境配置 x 1 1安装Anaconda 直接官网下载Anaconda 安装完成后 conda V查看是否安装成功 activate gt 进入base环境 conda create n py37 python 3 7 创建

随机推荐

  • 启用tun设备开启tap虚拟网卡功能

    注意 该文章中的arp应答部分是有问题的 由于作者现在已经没有实验环境无法再进行修正了 望看该文章的人注意一下 关于tun设备启用tap网卡 就是启用一个字符设备 使用open函数得到一个tun设备的文件描述符 可以使用write和read
  • (七)mkdocs学习——其他技巧

    mkdocs学习笔记系列 一 MkDocs 学习 快速开始 二 MkDocs学习笔记 撰写文档 三 MkDocs学习 配置主题 四 MkDocs学习 自定义主题 五 MkDocs学习 配置文件 六 MkDocs学习 部署文档 七 mkdoc
  • 如何搭建自己的写作素材库,快来学,方法高效简单

    我们平时看过的书 做过的事 不及时记下来 很可能过几天就忘记了 由此看来 搭建自己的写作素材库非常有必要 尤其是写作者 写稿的速度取决于自己写作素材的储备量 你储备的素材越多 写作时便可以拿来即用 不用再费尽心思找个好几天 我们该如何搭建自
  • ACL的规则总结

    按照由上到下的顺序执行 找到第一个匹配后既执行相应的操作 然后跳出ACL 每条ACL的末尾隐含一条deny any 的规则 ACL可应用于某个具体的IP接口的出方向或入方向 ACL可应用于系统的某种特定的服务 如针对设备的TELNET 在引
  • WEB开发中遇到的困难,controller方法对应的url显示不出来页面

    问题 controller方法对应的url返回页面但是显示不出来页面 等待下午来人求救 这个问题真是日了狗了啊 明明项目没动 刚开始运行项目的时候总是报错 java lang ClassNotFoundException 然后检查了一下对应
  • linux vi的命令

    inux vi命令详解 刚开始学着用linux 对vi命令不是很熟 在网上转接了一篇 vi编辑器是所有Unix及Linux系统下标准的编辑器 它的强大不逊色于任何最新的文本编辑器 这里只是简单地介绍一下它的用法和一小部分指 令 由于 对Un
  • 【录制Selenium IDE导出python代码】

    Generated by Selenium IDE import pytest import time import json from selenium import webdriver from selenium webdriver c
  • PHP内置函数intval()使用不当的安全漏洞分析

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 描述 intval函数有个特性 直到遇上数字或正负符号才开始做转换 再遇到非数字或字符串结束时 结束转换 在某些应用程序里由于对intval函数这个特性认识不够 错误的
  • react中使用splice函数去删除数组的某一项

    1 splice函数 splice 方法向 从数组中添加 删除项目 然后返回被删除的项目 slice 方法可从已有的数组中返回选定的元素 所以 在使用的时候 就要注意的是 splice返回的是被删除的项目 2 举一个我在react中使用的小
  • 单片机预备知识(电平、进制转换、字节、数据类型)

    参考 郭天祥十天带你精通51单片机 网址 https www bilibili com video BV1DW411a7mz spm id from 333 788 videocard 0 目录 电平特性 二进制 进制转换 1K字节等于多少
  • Ubuntu18.04 安装cmake-3.18.0,报错openssl

    1 问题描述 Downloads wget https cmake org files v3 18 cmake 3 18 0 tar gz Downloads tar xf cmake 3 18 0 tar gz Downloads cd
  • mvvm框架是什么

    MVVM是Model View ViewModel的简写 它本质上就是MVC Model View Controller 的改进版 在开发过程中 由于需求的变更或添加 项目的复杂度越来越高 代码量越来越大 此时我们会发现MVC维护起来有些吃
  • mysql表操作-约束删除、用户填加、授权和撤权

    目录 一 表的约束删除 1 查看所有表的约束条件 2 删除主键 3 删除唯一键 4 删除check键值 5 删除check键值 6 删除not null键值并删除check键值 7 删除键外值 8 检查表的约束条件是否存在 二 设置数据库密
  • 数据通信介绍

    数据通信方式有两种 串行通信与并行通信 一 串行通信 串行通信是指数据的各位在同一根数据线上逐位发送和接收 如下图所示 它可以按照数据传送方向和通信方式来划分 如果按照数据传送方向分类 则分为以下方式 单工 数据传输只支持数据在一个方向上传
  • 链接库的时候,提示load shared libraries error,xxx file too short

    该问题主要是提示 load shared libraries error xxx file too short 软连接链接问题 原因 程序链接的动态库中有软连接 但是软连接没有 l 标识 被识别成了实际的动态库文件 软连接文件又太小 所以就
  • 使用 vue-router 切换页面时怎么设置过渡动画

    如何实现切换页面时的过渡动画 背景 今天在编写页面时 看到页面没有任何效果就只是直入直出 完全没有一点逼格 所以想要实现类似于原生app的那种切换页面时的特效 遂开始google 发现网上各种方案都是各有优缺点 于是整理了自认为优雅的方案并
  • warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]

    warning gets is deprecated declared at usr include stdio h 638 Wdeprecated declarations 5 c In function getinfo 5 c 20 2
  • Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置

    最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑 特意记录下来方便有需要的人 进入正题 一 安装Jenkins 1 Mac上安装Jenkins 遇到到坑 因为 Jenkins 的pkg安装包默认安装位置为shar
  • 学习Python:探索无限可能

    Python是一种简洁而强大的编程语言 广泛应用于各个领域 从Web开发到数据分析 人工智能和科学计算 学习Python不仅可以提高编程技能 还能为你打开无限的创造力和发展机会 在本文中 我将介绍一些学习Python的重要用途 并提供相应的
  • 链家网页爬虫_爬虫实战1-----链家二手房信息爬取

    经过一段机器学习之后 发现实在是太枯燥了 为了增添一些趣味性以及熟练爬虫 在之后会不定时的爬取一些网站 旨在熟悉网页结构 尤其是HTML的元素 ajax存储 json 熟练使用pyspider scrapy两大框架 掌握基本的request