php 爬虫抓取网页数据(房产网站买卖信息,分析房价变化趋势、做不同区域的房价分析 )
优采云 发布时间: 2022-01-14 20:12php 爬虫抓取网页数据(房产网站买卖信息,分析房价变化趋势、做不同区域的房价分析
)
前言
仔细观察不难发现,了解和了解爬虫的人越来越多。一方面,可以从互联网上获取越来越多的数据。另一方面,像 Python 这样的编程语言提供了越来越多的优秀工具,让爬虫变得简单易用。
使用爬虫,我们可以获得大量有价值的数据,从而获得感性知识无法获得的信息,例如:
1.为市场研究和业务分析抓取数据。
抓取知乎优质答案,为你筛选出每个主题下的最佳内容。捕捉房地产网站买卖信息,分析房价变化趋势,做不同区域的房价分析。爬取招聘网站各类职位信息,分析各行业人才需求及薪资水平。
2.作为机器学习和数据挖掘的原创数据。
比如你想做一个推荐系统,那么你可以爬取更多维度的数据,做出更好的模型。
3.爬取优质资源:图片、文字、视频
抓取知乎钓鱼帖\图片网站获取福利图片。
原本我们可以手动完成这些事情,但是如果我们只是简单地复制粘贴,那是非常耗时的。比如要获取100万行数据,大约需要两年左右的重复工作。爬虫可以在一天内为你完成,完全不需要任何干预。
对于小白来说,爬虫可能是一件很复杂的事情,技术门槛很高。比如有人认为学习爬虫一定要精通Python,然后哼哼哼系统地学习Python的每一个知识点,发现时间长了还是不能爬取数据;有的人认为必须先掌握网页的知识,于是开始 HTML\CSS ,结果进了前端的坑,窒息……
但是掌握正确的方法,能够在短时间内爬取主流的网站数据,其实是很容易实现的。但建议你从一开始就有一个明确的目标,你要爬取哪些网站的数据,以及多大的量级。
以目标为驱动,您的学习将更加准确和高效。所有你认为必要的必备知识,都可以在完成目标的过程中学习。这是一个流畅的、从零开始的快速入门学习路径。
1.了解爬虫的基本原理和流程
2.Requests+Xpath 实现通用爬虫例程
3.了解非结构化数据的存储
4.学习scrapy并构建一个工程爬虫
5.学习数据库知识,处理*敏*感*词*数据存储和提取
6.掌握各种技巧应对特殊网站防爬措施
7.分布式爬虫,实现*敏*感*词*并发采集,提高效率
1.了解爬虫的基本原理和流程
大多数爬虫遵循“发送请求-获取页面-解析页面-提取并存储内容”的过程,实际上模拟了使用浏览器获取网页信息的过程。
简单来说,我们向服务器发送请求后,会得到返回的页面。解析完页面后,我们就可以提取出我们想要的部分信息,存储到指定的文档或数据库中。
这部分可以简单的了解HTTP协议和网页的基础知识,如POST\GET、HTML、CSS、JS等,通俗易懂,不需要系统学习。
2.学习Python包,实现基本爬取流程
Python中有很多爬虫相关的包:urllib、requests、bs4、scrapy、pyspider等,建议从requests+Xpath入手。Requests 负责连接到 网站 并返回网页。Xpath用于解析网页,方便提取数据。
如果你用过BeautifulSoup,你会发现Xpath省了很多麻烦,层层检查元素代码的工作都省去了。掌握之后你会发现爬虫的基本套路都差不多。一般的静态网站完全没有问题,小猪、豆瓣、尴尬百科、腾讯新闻等基本都能上手。
我们来看一个抓取豆瓣短评的例子:
通过定位,我们得到了第一条短评论的XPath信息:
//*[@id="comments"]/ul/li[1]/div[2]/p
但是通常我们会想要抓取很多简短的评论,然后我们会想要得到很多这样的 XPath 信息:
//*[@id="comments"]/ul/li[1]/div[2]/p
//*[@id="comments"]/ul/li[2]/div[2]/p
//*[@id="comments"]/ul/li[3]/div[2]/p
………………………………
观察1、2、2条短评论的XPath信息,你会发现模式,只有
4.掌握各种技巧应对特殊网站防爬措施
爬取一个页面的数据是没有问题的,但是我们通常要爬取多个页面。
这时候我们需要看看翻页时url是如何变化的,或者以短评的页面为例,我们看看多个页面的url是如何不同的:
https://book.douban.com/subject/1084336/comments/
https://book.douban.com/subject/1084336/comments/hot?p=2
https://book.douban.com/subject/1084336/comments/hot?p=3
https://book.douban.com/subject/1084336/comments/hot?p=4
……………………
通过前四页,我们可以找到规律。不同的页面只在末尾标有页面的序列号。我们以爬取5个页面为例,写一个循环更新页面地址即可。
for a in range(5):
url="http://book.douban.com/subject/1084336/comments/hot?p={}".format(a)
当然,在爬取过程中也会有一些绝望,比如被网站IP屏蔽,比如各种奇怪的验证码,userAgent访问限制,各种动态加载等等。
遇到这些反爬方式,当然需要一些高级技巧来应对,比如访问频率控制、代理IP池的使用、抓包、验证码的OCR处理等等。
比如我们经常会发现有些网站的url在翻页后没有变化,这通常是异步加载。我们使用开发者工具分析页面加载信息,经常会得到意想不到的结果。
比如很多情况下,如果我们通过代码发现网页无法访问,可以尝试添加userAgent信息。
往往网站会在高效开发和反爬虫之间偏爱前者,这也为爬虫提供了空间。掌握了这些反爬技能,大部分网站对你来说都不再难了。
5.学习爬虫框架,搭建工程爬虫
掌握之前技术一般水平的数据和代码基本没有问题,但是在非常复杂的情况下,你可能还是做不到你想要的。这时候,强大的scrapy框架就非常有用了。
scrapy 是一个非常强大的爬虫框架。它不仅可以轻松构建请求,还具有强大的选择器,可以轻松解析响应。不过,最让人惊喜的是它的超高性能,让你可以设计爬虫,模块化。
学习scrapy,可以自己搭建一些爬虫框架,基本具备爬虫工程师的思维。
6.学习数据库基础,处理*敏*感*词*数据存储
当爬回来的数据量较小时,可以以文档的形式存储。一旦数据量很大,这有点行不通。所以,掌握一个数据库是很有必要的,学习目前主流的MongoDB就可以了。
MongoDB可以方便你存储一些非结构化的数据,比如各种评论的文字、图片的链接等。你也可以使用PyMongo在Python中更方便的操作MongoDB。
因为这里用到的数据库知识其实很简单,主要是如何存储和提取数据,需要的时候学。
7.分布式爬虫实现*敏*感*词*并发采集
爬取基础数据不再是问题,你的瓶颈将集中在爬取海量数据的效率上。这个时候,相信大家自然会接触到一个很厉害的名字:分布式爬虫。
分布式的东西听起来很吓人,但其实它是利用多线程的原理,让多个爬虫同时工作。你需要掌握Scrapy + MongoDB + Redis这三个工具。
之前我们说过,Scrapy用于基本的页面爬取,MongoDB用于存储爬取的数据,Redis用于存储待爬取网页的队列,即任务队列。
所以不要被看起来很深的东西吓倒。当你能写出分布式爬虫的时候,就可以尝试搭建一些基本的爬虫架构,实现一些更自动化的数据获取。
你看,经过这条学习路径,你已经可以成为一名老司机了,非常顺利。所以一开始尽量不要系统地啃一些东西,找一个实用的项目(可以从豆瓣小猪这种简单的东西入手),直接入手。
因为爬虫的技术不需要你系统地精通一门语言,也不需要拥有先进的数据库技术,高效的姿势就是从实际项目中学习这些零散的知识点,可以保证每次学习都是零件这是最需要的。
当然,唯一的困难是,当你一开始经验不足时,在寻找资源和解决问题的方法时总会遇到一些困难,因为我们往往很难在一开始就将具体问题描述清楚。如果有大神帮忙指点学习路径,答疑解惑,效率会高很多。
在此真诚推荐我们的CSDN【系统爬虫】)课程:【Python爬虫:入门+进阶】。扫描下方二维码,免费获取清晰高效的学习路径,教师实时答疑。