Python 爬虫 链家二手房(自行输入城市爬取)

因同事想在沈阳买房,对比分析沈阳各区的房价,让我帮忙爬取一下链家网相关数据,然后打 算记下笔记 用于总结学到的东西&用到的东西。

一.爬虫需要会什么?

学习东西 首先你要知道它是干嘛的。爬虫 顾名思义就是爬取你所看到的网页内容 小说/新闻/信息等。而网页相关的也就是 HTML 学过网页的最清楚不过了。 HTML(超文本标记语言) 用各种标签来识别内容,浏览器会翻译成所看到的网页页面,HTML只是个基础 展示的只是静态的网页(也就是不会动的陈列好的网页) 还需要美化的CSS 和 实现动态的JavaScipt。想学习的可以 参考 HTML 基础 | 菜鸟教程。做爬虫也不需要了解学习很多,只需要了解HTML是基于文档对象模型(DOM)的,以树的结构,存储各种标记。

接下来 就是python(我用的是python3.6) 中 爬虫相关的辅助库

     Requests库 比较好用的HTTP库

     BeautifulSoup库 优秀的HTML/XML解析库,采用来做爬虫 该库解析时需要个解析器 lxml

辅助的还有很多 由于本文只用到这两个 同时这两个基本足够了,有兴趣的可以百度学习别的。

二.爬虫实例(链家二手房):

1.URL(统一资源定位符 也称为网页地址):链家二手房

像标题所言 自行输入城市 并不是所有的爬虫都通用 要找到每个url 之间的规律,如下

https://sy.lianjia.com/ershoufang/pg1/

https://bj.lianjia.com/ershoufang/pg1/

https://ts.lianjia.com/ershoufang/pg1/

很明显可以看出规律 https:// + city + .lianjia.com/ershoufang/pg +页码+/

由于 基本最多页码就100页 也就不需要自己输入页码(在程序中循环替换页码) 故笔记中 url则为

单页url:  
    a=1
    url ='http://' + user_in_city +'.lianjia.com/ershoufang/pg{}/' 
    url1.url.format(a)
(或者直接写)
    url ='http://' + user_in_city +'.lianjia.com/ershoufang/pg1/' 
    
循环url:
    user_in_city='sy'
    url ='http://' + user_in_city +'.lianjia.com/ershoufang/pg{}/' 
    for a in range(1, 101):
        url1 = url.format(a)
        print(url1)

2.Request

我们可以requests.get(url) 来 Get该网页从而获取该html内容

import requests

url = 'http://sy.lianjia.com/ershoufang/pg1/'
page = requests.get(url)
print(page)

但是实践以后该网站会报错 403 服务器拒绝访问
这就需要我们添加headers 模仿浏览器访问,就变成下面代码

header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}
page = requests.get(url1, headers=header)
a=page.text
print(a)

注:header获取方式
抓取内容如下:

网页HTML.png

3.BeautifulSoup

BeautifulSoup 作为优秀的HTML/XML解析库 方便又简单


代码.png

如上图所见,点击小红色框框的三角 选中网页上的模块,阴影部分会自动跳到该模块的标签位置(大红色框框)可以把该部分的标签粘贴到本地 方便查看。

import requests
from bs4 import BeautifulSoup

url = 'http://sy.lianjia.com/ershoufang/pg1/'
header = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}
page = requests.get(url, headers=header)  #访问网址 获取该 html内容
a = page.text
soup = BeautifulSoup(a,"lxml")  #解析该网页内容
b=soup.find_all('div',class_='info clear') #find_all 找到 div  class='info clear' 的标签
print(b)

爬取的内容就是我们需要的全部内容 中间会掺杂一些标签

6.去除标签

标签.png

图片中 我们可以看到 爬取出来中 还掺杂许多标签,而我们只需要文字,然后我想到了正则(可惜我不会,哈哈哈哈,有会的大神可以教教我)
但笨人有笨方法:我们一个一个解析 取文字
像图片中 【枫合万嘉 南北通透...】我们可以看出是 div标签 class='title' 的。(因为每页有很多个房源信息 所以我们要 for 循环)
其它标签亦然如此


去标签.png

我们还要爬出导入excle ,因此我在一个房源所有信息中加入[,] 方便我们后续分列 透视(只列出两个标签)


分列.png

7.标签去除掉 就要导入文件

 with open("链家-沈阳-二手房-over", "a", encoding='utf-8') as f:
           f.write(df+'\n')

我导入的是txt 文本 ,有需要可以导入 Excle Csv

8.分析数据(同事分析的一小部分数据)

分析.png

9.源代码

##author:Abel_chen
##防止你们照搬 我做了两个小错误 偷笑.jpg
import requests
from bs4 import BeautifulSoup


def one_page_code(user_in_city):
 url = 'http://' + user_in_city + '.lianjia.com/ershoufang/pg{}/'
 for a in range(1, 101):
    url1 = url.format(a)

    header = {'User-Agent': '*********'}
    page = requests.get(url1, headers=header)
    a=page.text
    soup = BeautifulSoup(a,"lxml")

    for b in soup.find_all('div',class_='info clears'):
      for wz in b.find_all('div',class_='title'):
        wz=wz.get_text()
      for ad in b.find_all('div',class_='address'):
        ad=ad.get_text()
      for ys in b.find_all('div',class_='flood'):
        ys=ys.get_text()
      for sj in b.find_all('div',class_='followInfo'):
        sj=sj.get_text()
      for tag in b.find_all('div',class_='tag'):
        tag=tag.get_text()
      for jg in b.find_all('div',class_='priceInfo'):
        jg=jg.get_text()

      df=wz + ',' + ad + ',' + ys + ',' + sj + ',' + tag + ',' + jg
      with open("链家-沈阳-二手房-over", "a", encoding='utf-8') as f:
           f.write(df+'\n')

def main():
    user_in_city = input('输入爬取城市:')
    one_page_code( user_in_city)

if __name__ == '__main__':
    main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351