龙电竞官网利用Python来协助姑妈买房!Python“买”房比她自己买便宜二十万

2019-12-01 01:46栏目:龙竞技官网
TAG:

2.2.2 深圳房源维度分析

深圳房源按多维度分析成交量/成交价趋势和皮尔逊系数分析;放盘量和反叛价分析;房源内部参数(如2.1.1)量化分析,房源外部参数量化分析等方式。最终解释我们购房时比较关心问题如怎么买的心仪的好房,何时是买房最好的时机等。

龙电竞官网 1

 

1.爬虫进阶cookielib

  • Python入门网络爬虫之精华版:详细讲解了Python学习网络爬虫。
  • 为了进行高效的抓取有用的数据,并且减少冗余数据的存储,后续需要使用正则表达式来进行对爬取数据中特定内容的存储。
  • urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。假如一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问。可以设置代理IP来进行爬虫,具体见代码操作(四)
  • 当你获取一个URL你使用一个opener。在
    Python网络爬虫(二)- urllib爬虫案例中,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是urldatatimeout
  • Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)

    • cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJarFileCookieJarMozillaCookieJarLWPCookieJar

    • 如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。

1)获取Cookie,并保存到CookieJar()对象中

# urllib2_cookielibtest1.py

import urllib2
import cookielib

# 构建一个CookieJar对象实例来保存cookie
cookiejar = cookielib.CookieJar()

# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler=urllib2.HTTPCookieProcessor(cookiejar)

# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)

# 4. 以get方法访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com")

## 可以按标准格式将保存的Cookie打印出来
cookieStr = ""
for item in cookiejar:
    cookieStr = cookieStr + item.name + "=" + item.value + ";"

## 舍去最后一位的分号
print cookieStr[:-1]

2) 访问网站获得cookie,并把获得的cookie保存在cookie文件中

# urllib2_cookielibtest2.py

import cookielib
import urllib2

# 保存cookie的本地磁盘文件名
filename = 'cookie.txt'

# 声明一个MozillaCookieJar(有save实现)对象实例来保存cookie,之后写入文件
cookiejar = cookielib.MozillaCookieJar(filename)

# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)

# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)

# 创建一个请求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")

# 保存cookie到本地文件
cookiejar.save()

3)从文件中获取cookies,做为请求的一部分去访问

# urllib2_cookielibtest2.py

import cookielib
import urllib2

# 创建MozillaCookieJar(有load实现)实例对象
cookiejar = cookielib.MozillaCookieJar()

# 从文件中读取cookie内容到变量
cookie.load('cookie.txt')

# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)

# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)

response = opener.open("http://www.baidu.com")
  • urllib 模块方法。

  • urllib2 的异常错误处理

    • URLError
import urllib2

requset = urllib2.Request('http://www.ajkfhafwjqh.com')

try:
    urllib2.urlopen(request, timeout=5)
except urllib2.URLError, err:
    print err
  • HTTPError

HTTPError是URLError的子类,我们发出一个请求时,服务器上都会对应一个response应答对象,其中它包含一个数字"响应状态码"。

如果urlopen或opener.open不能处理的,会产生一个HTTPError,对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态。

注意,urllib2可以为我们处理重定向的页面(也就是3开头的响应码),100-299范围的号码表示成功,所以我们只能看到400-599的错误号码。

import urllib2

requset = urllib2.Request('http://blog.baidu.com/itcast')

try:
    urllib2.urlopen(requset)
except urllib2.HTTPError, err:
    print err.code
    print err
  • 改进版
import urllib2

requset = urllib2.Request('http://blog.baidu.com/itcast')

try:
    urllib2.urlopen(requset)

except urllib2.HTTPError, err:
    print err.code

except urllib2.URLError, err:
    print err

else:
    print "Good Job"

这样我们就可以做到,首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。

网站爬虫的大体思路是 :

  1. 模拟网站登录请求
  2. 网络请求获取网页源代码
  3. CSS selector 或 xpath 选定需要的元素, 获取内容属性等
  4. 结构化数据并存储到数据库
  5. 定时,并发执行爬虫
  • 关于 iOS 的爬虫, 可以参考我之前的文章 iOS 抓取 HTML ,CSS XPath 解析数据

2.2.5 深圳房源均价涨速热力模型

//TODO 确定涨速最快,最具投资价值的区域,数据来源官网深圳房地产信息系统:

代码操作(五) 爬取人人网个人中心数据,需要验证登陆

# -*- coding:utf-8 -*-
import urllib
import urllib2
import cookielib


#声明一个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()

#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
cookielib_handler = urllib2.HTTPCookieProcessor(cookie)

#创建一个请求打开方式
opener = urllib2.build_opener(cookielib_handler)

#构建请求对象 'http://www.renren.com/PLogin.do' 这个接口没有做反爬虫处理
url = 'http://www.renren.com/PLogin.do' #http://www.renren.com/SysHome.do,这个接口做了反爬虫处理
data = urllib.urlencode({'email':'用户名','password':'密码'})
request = urllib2.Request(url,data)

#发送请求
response = opener.open(request)

#获取数据
content = response.read()

print content

data数据从form表单name中获取

最后

文章是我爬取 V2EX 的学习整理

我的 V2 爬虫 : V2EX_Crawler

2.2.7 深圳房源成交量热力模型

代码操作(六) 爬取指定网页的图片保存至本地,这里写的函数是爬取游民星空每周壁纸精选

# -*- coding:utf-8 -*-
import urllib
import urllib2
import re

#定义函数,用于爬取对应的数据
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

#定义函数,进行爬虫的核心处理功能
def getImg(html):
    #使用正则表达式匹配想要保存的数据———图片
    reg = 'src="(.+?.jpg)"'
    #将正则表达式编译成Pattern对象,
    imgre = re.compile(reg)
    imglist = re.findall(imgre, html)
    x = 0
    for imgurl in imglist:
        urllib.urlretrieve(imgurl, '%s.jpg' % x)
        x+=1
    return imglist

#主程序运行入口
if __name__ == '__main__':
    Html = raw_input('请输入想要爬取的网页链接:')

    html = getHtml(Html)
    getImg(html)

爬虫

2.2.4 深圳房源均价热力模型

如图展示深圳深圳房源均价热力模型。//TODO 待分析

龙电竞官网 2

 

代码操作(三)从ftp服务器爬取数据

# -*- coding:utf-8 -*-
import urllib,urllib2

#准备数据
ftp_server = '192.168.1.100'
username = 'root'
password = '123'

#创建一个密码管理器对象
pass_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

#增加一个管理服务器
pass_mgr.add_password(None,ftp_server,username,password)

#创建一个web验证服务器
http_auth_handler = urllib2.HTTPBasicAuthHandler(pass_mgr)

#构建一个请求对象
request = urllib2.Request('http://image.baidu.com')

#创建自定义打开方式对象【开锁人】
opener = urllib2.build_opener(http_auth_handler)

#发送请求,获取服务器的响应对象
response = opener.open(request)

# 获取响应中的数据
content = response.read()

#处理相关数据
print content

基本库

  1. Beautiful Soup : 从 HTML 获取指定的节点及数据
  2. Requests: HTTP for Humans : 网络请求库

最核心的就是这 2 个模块, 其它的数据存储, 定时任务, 多线程等都是锦上添花

不错的教程
Python爬虫利器一之Requests库的用法
Python爬虫利器二之Beautiful Soup的用法
Scrapy笔记11- 模拟登录
Scrapy随机更换User-Agent和实现IP代理池

2.2.8 深圳房源成交量和成交价皮尔逊系数

//TODO 计算皮尔逊系数,确定量价比关系,确认深圳房源当前状态和预测接下来可能的情况(有价有市,有市无价,有价无市),判断当前是否改上车。

目录:

  • Python网络爬虫(一)- 入门基础
  • Python网络爬虫(二)- urllib爬虫案例
  • Python网络爬虫(三)- 爬虫进阶
  • Python网络爬虫(四)- XPath
  • Python网络爬虫(五)- Requests和Beautiful Soup
  • Python网络爬虫(六)- Scrapy框架
  • Python网络爬虫(七)- 深度爬虫CrawlSpider
  • Python网络爬虫(八) - 利用有道词典实现一个简单翻译程序

其它

2.2.6 深圳房源成交量热力模型

//TODO

注解: urllib 模块提供的 urlretrieve() 函数

urlretrieve(url, filename=None, reporthook=None, data=None)
  • 参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • 参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • 参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。
  • urllib2与urllib一些常用方法的比较

爬取的是游民星空壁纸精选

从本地文件可以看到爬取保存至本地20张图片

动态页面

  1. 有些页面的数据是 JS 动态加载的, 比如懒加载图片, 滚动加载更多等
    • 此时, 我们直接发送网络请求获取到的页面, 并没有执行 JS 代码, 所以懒加载的元素都尚为加载出来, 我们需要下面 2 个库.
  2. Python 代码控制 PhantomJS 加载页面, 然后 Selenium 模拟用户点击, 滚动屏幕, 触发网页中的 AJAX 加载更多内容的请求, 等元素都加载完全, 再爬取数据

Selenium : web的自动测试工具, 模拟点击按钮, 滚动页面等
PhantomJS : 没有界面的浏览器

不错的教程
Python爬虫利器五之Selenium的用法
Python爬虫利器四之PhantomJS的用法

版权声明:本文由龙竞技官网发布于龙竞技官网,转载请注明出处:龙电竞官网利用Python来协助姑妈买房!Python“买”房比她自己买便宜二十万