Python使用爬虫爬取贵阳房价的方法详解

目录
  • 1 序言
    • 1.1 生存压力带来的哲思
    • 1.2 买房&房奴
  • 2 爬虫
    • 2.1 基本概念
    • 2.2 爬虫的基本流程
  • 3 爬取贵阳房价并写入表格
    • 3.1 结果展示
    • 3.2 代码实现(Python)
  • 总结

1 序言

1.1 生存压力带来的哲思

马尔萨斯最早发现,生物按照几何级数高度增殖的天赋能力,总是大于他们的实际生存能力或现实生存群量,依次推想,生物的种内竞争一定是极端残酷且无可避免。姑且不论马尔萨斯是否有必要给人类提出相应的警告,仅是这一现象中隐含的一系列基础问题,譬如,生物的超量繁殖能力的自然限度何在?种内竞争的幸存者依靠什么优势来取胜?以及这些所谓的优势群体如何将自己引向何方?等等,就足以引起任何一位有思想的人不能不怵然(恐惧)深思。

后来,达尔文在他的那部划时代的《物种起源》一书的绪论中,特意提及马尔萨斯学说的科学贡献和启迪作用,可见要成为那个马老教士的知音,并不是一般人够资格的!

1.2 买房&房奴

现在结婚,女方一般要求男方有房有车,其实也不能怪人家女孩子,在社会社会高度发展、动荡的今天,这个要求确实不高。奈何改革开放以来,阶级固化,吾辈难矣!先看看贵阳房价(链家新房:https://gy.fang.lianjia.com/

不能被时代淘汰了,不能总唉声叹气的,白手起家的的大资本家寥寥无几,人家刘强东就是一个。偶像归偶像,回到现实中来吧,农村孩子,可能买了房,就可能是一辈子的房奴,回到农村,表面光鲜亮丽的被别人崇拜着,心里的苦和委屈只有自己知道。鉴于此,我个人不想做房奴车奴,快乐是自己的,生活是自己的,活出自己的精彩,不是活给别人看的,我想让自己命运的旖旎风景绚丽多姿,现阶段要做的是提升自己能力,不想做房奴!

心血澎湃,感叹完了,该回到今天的主题。何不把这些数据弄到一个文档表格里面分析分析,说干就干,就用爬虫爬取吧,然后写入文档。

2 爬虫

2.1 基本概念

网络爬虫(Crawler):又称网络蜘蛛,或者网络机器人(Robots). 它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。换句话来说,它可以根据网页的链接地址自动获取网页内容。如果把互联网比做一个大蜘蛛网,它里面有许许多多的网页,网络蜘蛛可以获取所有网页的内容。

爬虫是一个模拟人类请求网站行为, 并批量下载网站资源的一种程序或自动化脚本。

  • 爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。
  • 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量。
  • 误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。
  • 拦截:成功地阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因此需要做个权衡。
  • 资源:机器成本与人力成本的总和。

2.2 爬虫的基本流程

(1)请求网页:通过 HTTP 库向目标站点发起请求,即发送一个 Request,请求可以包含额外的 headers 等
信息,等待服务器响应!

(2)获得相应内容:如果服务器能正常响应,会得到一个 Response,Response 的内容便是所要获取的页面内容,类型可能有 HTML,Json 字符串,二进制数据(如图片视频)等类型。

(3)解析内容:得到的内容可能是 HTML,可以用正则表达式、网页解析库进行解析。可能是 Json,可以
直接转为 Json 对象解析,可能是二进制数据,可以做保存或者进一步的处理。

(4)存储解析的数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件

测试案例:代码 实现: 爬取贵阳房价的页面数据

#==========导 包=============
import requests
#=====step_1 : 指 定 url=========
url = 'https://gy.fang.lianjia.com/ /'
#=====step_2 : 发 起 请 求 :======
#使 用 get 方 法 发 起 get 请 求 , 该 方 法 会 返 回 一 个 响 应 对 象 。 参 数 url 表 示 请 求 对 应 的 url
response = requests . get ( url = url )
#=====step_3 : 获 取 响 应 数 据 :===
#通 过 调 用 响 应 对 象 的 text 属 性 , 返 回 响 应 对 象 中 存 储 的 字 符 串 形 式 的 响 应 数 据 ( 页 面 源 码数 据 )
page_text = response . text
#====step_4 : 持 久 化 存 储=======
with open ('贵阳房价 . html ','w', encoding ='utf -8') as fp:
    fp.write ( page_text )
print (' 爬 取 数 据 完 毕 !!!')

爬 取 数 据 完 毕 !!!
Process finished with exit code 0

3 爬取贵阳房价并写入表格

3.1 结果展示

3.2 代码实现(Python)

#==================导入相关库==================================
from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import  RequestException
import pandas as pd
#=============读取网页=========================================
def craw(url,page):
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
        html1 = requests.request("GET", url, headers=headers,timeout=10)
        html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的
        html=html1.text
        return html
    except RequestException:#其他问题
        print('第{0}读取网页失败'.format(page))
        return None
#==========解析网页并保存数据到表格======================
def pase_page(url,page):
    html=craw(url,page)
    html = str(html)
    if html is not None:
        soup = BeautifulSoup(html, 'lxml')
        "--先确定房子信息,即li标签列表--"
        houses=soup.select('.resblock-list-wrapper li')#房子列表
        "--再确定每个房子的信息--"
        for j in range(len(houses)):#遍历每一个房子
            house=houses[j]
            "名字"
            recommend_project=house.select('.resblock-name a.name')
            recommend_project=[i.get_text()for i in recommend_project]#名字 英华天元,斌鑫江南御府...
            recommend_project=' '.join(recommend_project)
            #print(recommend_project)
            "类型"
            house_type=house.select('.resblock-name span.resblock-type')
            house_type=[i.get_text()for i in house_type]#写字楼,底商...
            house_type=' '.join(house_type)
            #print(house_type)
            "销售状态"
            sale_status = house.select('.resblock-name span.sale-status')
            sale_status=[i.get_text()for i in sale_status]#在售,在售,售罄,在售...
            sale_status=' '.join(sale_status)
            #print(sale_status)
            "大地址"
            big_address=house.select('.resblock-location span')
            big_address=[i.get_text()for i in big_address]#
            big_address=''.join(big_address)
            #print(big_address)
            "具体地址"
            small_address=house.select('.resblock-location a')
            small_address=[i.get_text()for i in small_address]#
            small_address=' '.join(small_address)
            #print(small_address)
            "优势。"
            advantage=house.select('.resblock-tag span')
            advantage=[i.get_text()for i in advantage]#
            advantage=' '.join(advantage)
            #print(advantage)
            "均价:多少1平"
            average_price=house.select('.resblock-price .main-price .number')
            average_price=[i.get_text()for i in average_price]#16000,25000,价格待定..
            average_price=' '.join(average_price)
            #print(average_price)
            "总价,单位万"
            total_price=house.select('.resblock-price .second')
            total_price=[i.get_text()for i in total_price]#总价400万/套,总价100万/套'...
            total_price=' '.join(total_price)
            #print(total_price)
            #=====================写入表格=================================================
            information = [recommend_project, house_type, sale_status,big_address,small_address,advantage,average_price,total_price]
            information = np.array(information)
            information = information.reshape(-1, 8)
            information = pd.DataFrame(information, columns=['名称', '类型', '销售状态','大地址','具体地址','优势','均价','总价'])
            information.to_csv('贵阳房价.csv', mode='a+', index=False, header=False)  # mode='a+'追加写入
        print('第{0}页存储数据成功'.format(page))
    else:
        print('解析失败')
#==================双线程=====================================
import threading
for i  in range(1,100,2):#遍历网页1-101
    url1="https://gy.fang.lianjia.com/loupan/pg"+str(i)+"/"
    url2 = "https://gy.fang.lianjia.com/loupan/pg" + str(i+1) + "/"
    t1 = threading.Thread(target=pase_page, args=(url1,i))#线程1
    t2 = threading.Thread(target=pase_page, args=(url2,i+1))#线程2
    t1.start()
    t2.start()v

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python爬虫实现最新12306抢票

    1.环境 python 3.7谷歌浏览器chromedriver.exe(浏览器驱动程序,要与浏览器版本对应,并将其添加到环境变量或放到当前py文件所在目录下) 2.相关模块 time (用于某些地方对程序的强制等待)datatime (用于获取当前时间)selenium 3.1 自动化测试模块,这里用于操作浏览器) 3.思路 首先进行登录(支持手机扫码),登录完成进入页面之后,我们会看到有“温馨提示”的弹窗,即当前界面,我们需要处理第一次弹窗, 然后进入到菜单栏车票下的单程中(鼠标移动触发事件

  • Python爬虫练习汇总

    目录 一. 软件配置 二.爬取南阳理工OJ题目 (一)页面分析 (二)代码编写 三.爬取学校信息通知 (一)页面分析 (二)代码编写 一. 软件配置 安装必备爬虫环境软件: python 3.8 pip install requests pip install beautifulsoup4 二.爬取南阳理工OJ题目 网站地址:http://www.51mxd.cn/ (一)页面分析 切换页面的时候url网址发生变动,因此切换页面时切换第n页则为n.html 根据页面数据显示可以查看到只有题号.难

  • 一篇文章带你了解Python之Selenium自动化爬虫

    目录 Python之Selenium自动化爬虫 0.介绍 1.安装 2.下载浏览器驱动 3.实例 4.开启无头模式 5.保存页面截图 6.模拟输入和点击 a.根据文本值查找节点 b.获取当前节点的文本 c.打印当前网页的一些信息 d.关闭浏览器 e.模拟鼠标滚动 7.ChromeOptions 8.验证滑块移动 9.打开多窗口和页面切换 10.Cookie操作 11.模拟登录 12.使用代理 14.更换UA 15.鼠标悬停 16.优缺点 总结 Python之Selenium自动化爬虫 0.介绍

  • python爬虫爬取bilibili网页基本内容

    用爬虫爬取bilibili网站排行榜游戏类的所有名称及链接: 导入requests.BeautifulSoup import requests from bs4 import BeautifulSoup 然后我们需要插入网站链接并且要解析网站并打印出来: e = requests.get('https://www.bilibili.com/v/popular/rank/game')   #当前网站链接 html = e.content soup = BeautifulSoup(html,'htm

  • Python爬虫爬取网站图片

    此次python3主要用requests,解析图片网址主要用beautiful soup,可以基本完成爬取图片功能, 爬虫这个当然大多数人入门都是爬美女图片,我当然也不落俗套,首先也是随便找了个网址爬美女图片 from bs4 import BeautifulSoup import requests     if __name__=='__main__':     url='http://www.27270.com/tag/649.html'     headers = {         "U

  • Python使用爬虫爬取贵阳房价的方法详解

    目录 1 序言 1.1 生存压力带来的哲思 1.2 买房&房奴 2 爬虫 2.1 基本概念 2.2 爬虫的基本流程 3 爬取贵阳房价并写入表格 3.1 结果展示 3.2 代码实现(Python) 总结 1 序言 1.1 生存压力带来的哲思 马尔萨斯最早发现,生物按照几何级数高度增殖的天赋能力,总是大于他们的实际生存能力或现实生存群量,依次推想,生物的种内竞争一定是极端残酷且无可避免.姑且不论马尔萨斯是否有必要给人类提出相应的警告,仅是这一现象中隐含的一系列基础问题,譬如,生物的超量繁殖能力的自然

  • 使用Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. 先来简单介绍一下,网络爬虫的基本实现原理吧.一个爬虫首先要给它一个起点,所以需要精心选取一些URL作为起点,然后我们的爬虫从这些起点出发,抓取并解析所抓取到的页面,将所需要的信息提取出来,同时获得的新的URL插入到队列中作为下一次爬取的起点.这样不断地循环,一直到获得你想得到的所有的信息爬虫的任务

  • python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧! 所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取. 运行效果: http://photo.hupu.com/nba/tag/马刺 http://photo.hupu.com/nba/tag/陈露 源代码: # -*- coding: utf

  • Python使用爬虫爬取静态网页图片的方法详解

    本文实例讲述了Python使用爬虫爬取静态网页图片的方法.分享给大家供大家参考,具体如下: 爬虫理论基础 其实爬虫没有大家想象的那么复杂,有时候也就是几行代码的事儿,千万不要把自己吓倒了.这篇就清晰地讲解一下利用Python爬虫的理论基础. 首先说明爬虫分为三个步骤,也就需要用到三个工具. ① 利用网页下载器将网页的源码等资源下载. ② 利用URL管理器管理下载下来的URL ③ 利用网页解析器解析需要的URL,进而进行匹配. 网页下载器 网页下载器常用的有两个.一个是Python自带的urlli

  • Python实现爬虫爬取NBA数据功能示例

    本文实例讲述了Python实现爬虫爬取NBA数据功能.分享给大家供大家参考,具体如下: 爬取的网站为:stat-nba.com,这里爬取的是NBA2016-2017赛季常规赛至2017年1月7日的数据 改变url_header和url_tail即可爬取特定的其他数据. 源代码如下: #coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import requests import time import urll

  • 利用Python网络爬虫爬取各大音乐评论的代码

    python爬虫--爬取网易云音乐评论 方1:使用selenium模块,简单粗暴.但是虽然方便但是缺点也是很明显,运行慢等等等. 方2:常规思路:直接去请求服务器 1.简易看出评论是动态加载的,一定是ajax方式. 2.通过网络抓包,可以找出评论请求的的URL 得到请求的URL 3.去查看post请求所上传的数据 显然是经过加密的,现在就需要按着网易的思路去解读加密过程,然后进行模拟加密. 4.首先去查看请求是经过那些js到达服务器的 5.设置断点:依次对所发送的内容进行观察,找到评论对应的UR

  • Python爬虫爬取商品失败处理方法

    1.登陆网站,开启开发者模式. 可以在浏览器中点击右键检查或者F12打开开发者模式. 2.点选 NetWork,DOC,然后刷新页面. 在 network 中选择 doc,在请求的 headers 中搜索 cookie. 3.获取对应的 cookie 以及 user-agent. 4.在代码中添加到 headers 里面. def getHTMLText(url): kv = { 'cookie': 'adsgadfafegadsgadsfaefasdfaewfadsfag' 'uaer-age

  • python爬取天气数据的实例详解

    就在前几天还是二十多度的舒适温度,今天一下子就变成了个位数,小编已经感受到冬天寒风的无情了.之前对获取天气都是数据上的搜集,做成了一个数据表后,对温度变化的感知并不直观.那么,我们能不能用python中的方法做一个天气数据分析的图形,帮助我们更直接的看出天气变化呢? 使用pygal绘图,使用该模块前需先安装pip install pygal,然后导入import pygal bar = pygal.Line() # 创建折线图 bar.add('最低气温', lows) #添加两线的数据序列 b

  • python爬取各省降水量及可视化详解

    在具体数据的选取上,我爬取的是各省份降水量实时数据 话不多说,开始实操 正文  1.爬取数据 使用python爬虫,爬取中国天气网各省份24时整点气象数据 由于降水量为动态数据,以js形式进行存储,故采用selenium方法经xpath爬取数据-ps:在进行数据爬取时,最初使用的方法是漂亮汤法(beautifulsoup)法,但当输出爬取的内容(<class = split>时,却空空如也.在源代码界面Ctrl+Shift+F搜索后也无法找到降水量,后查询得知此为动态数据,无法用该方法进行爬取

  • 对python PLT中的image和skimage处理图片方法详解

    用PLT比较轻量级,用opencv是比较重量级 import numpy as np from PIL import Image if __name__ == '__main__': image_file = '/Users/mac/Documents/学习文档/机器学习/5.Package/son.png' height = 100 #假定写入图片的高度是100 img = Image.open(image_file) img_width, img_height = img.size #获取i

随机推荐