爬虫初探:弱水三千只取一瓢,房源三千全都想要

bs4爬取重庆链家在售二手房房源信息(总共爬取3000条)

写这篇博客两个目的,第一是总结复习最近一个月工作学习的爬虫内容,第二是给想学习python或者爬虫,但是没有python基础的童鞋们一些建议(不要怕,python是一门工具(或者是手艺),学习手艺最关键的就是做事情(写爬虫入门吧)。我是非CS出身,之前学过半年R语言,因为现在工作需要用到python,所以先学爬虫,大致了解一下python语言。

链家的网站目前是不设防的(没有反爬机制),所以爬起来是非常轻松的,也能够增加大家初学python或爬虫的信心。
准备阶段
第一步,工具准备
1.安装好python,然后我的编译器是pycharm。
2.选取爬取网站 https://cq.lianjia.com/ershoufang/
第二步,安装好需要的库,我这里是用BeautifulSoup爬取的,所以安装requests、bs4、 re、time(也可以用Xpath爬取,需要安装相应的库,time是设置访问频率的,两秒,太频繁可能禁止访问)
第三步,观察所需要爬取的网页信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我这里筛选信息是区域:江北,然后选取区域后,最多可以显示100页,每页有房源30条,我现在是处于第二页和第三页,所以网页URL分别是是https://cq.lianjia.com/ershoufang/jiangbei/pg2/
https://cq.lianjia.com/ershoufang/jiangbei/pg3/
网页URL包含了筛选的区域即jiangbei,还有第二页pg2和第三页pg3,这就是网页URL变化的规律(如果要爬取南岸区的在售二手房房源信息,可以把jiangbei改成nanan)。

开始爬取
爬虫就是抓取网页解析的数据,然后提取自己想要的信息
1.解析网页,这里是用的是BeautifulSoup解析网页

URL = "https://cq.lianjia.com/ershoufang/jiangbei/pg2"
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}
res = requests.get(URL, headers=header)
soup = BeautifulSoup(res.text, "lxml")

2.我们先爬取江北第二页30条房源的标题信息(鼠标悬在所选信息上,单击右键,点检查就可以看到网页代码)
在这里插入图片描述
可以看到,标题信息是在div class="title"下面的,抓取第一个房源标题信息

title = soup.select(".title")[1].text

抓取第二个房源标题信息

title = soup.select(".title")[2].text

这个网页共有30条房源信息,所以只需要一个for循环就可以全部抓取

for i in range(0, 30, 1):
    title = soup.select(".title")[i].text
    print(title)

效果如下
在这里插入图片描述
依旧葫芦画瓢,抓取其它剩下的房源信息(总价、单价、位置、户型、面积、朝向、装修、楼层,还有两个信息我就没有爬下来了,其实我最关心的就是单价)
链家每套房源都有自己唯一的房源编号,房源编号的信息在div class="tilte"下面能够找到在这里插入图片描述
就是这串数字,提取第一套房源编号

    numbers = soup.select(".title")
    t = str((list(numbers))[1])
    number = "N" + re.findall('\d+', t)[0]

3.写一个for循环,从第一页循环到第101页
现在所有房源信息都已经提取,然后写入json就可以了。效果如下
在这里插入图片描述
刚好30*100=3000条房源信息
下面附上所有代码

import requests
from bs4 import BeautifulSoup
import re
import time
URL_B = "https://cq.lianjia.com/ershoufang/jiangbei/pg"
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}
for j in range(1,101,1):
    URL = URL_B+str(j)
    time.sleep(2)
    html = requests.get(URL,headers = header)
    soup = BeautifulSoup(html.text,"lxml")
    for i in range(0, 30, 1):
        numbers = soup.select(".title")
        t = str((list(numbers))[i])
        number = "N"+re.findall('\d+', t)[0]
        title = soup.select(".title")[i].text
        total = soup.select(".totalPrice")[i].text
        unit = soup.select(".unitPrice")[i].text
        huxing = str(soup.select(".houseInfo")[i].text.split("|")[0])
        mianji = str(soup.select(".houseInfo")[i].text.split("|")[1])
        chaoxiang = str(soup.select(".houseInfo")[i].text.split("|")[2])
        zhuangxiu = str(soup.select(".houseInfo")[i].text.split("|")[3])
        louceng = str(soup.select(".houseInfo")[i].text.split("|")[4])
        with open(r'重庆江北二手房在售房源信息' + '.json', 'a', encoding='utf-8') as f:
            f.write(str(
                {"房屋编号": number, "标题": title, "总价": total, "单价": unit, "户型": huxing,
                 "面积": mianji,
                 "朝向": chaoxiang,
                 "装修":zhuangxiu,
                 "楼层":louceng,}) + '\n')

小结
链家江北在售二手房房源远远不止3000条,只是筛选条件之后只能展示100页的信息,如果要爬更多的江北房源信心,需要将筛选条件细分,可能筛选之后的信息不会像URL中jiangbei这个参数这么明显了,可能要再filter中寻找信息,但是能够爬下来链家房源信息对于新手来讲,肯定是信心大增。但是现在网站反爬机制越来越多,比如房天下的重定向,某查查的动态网页,爬取这些网站需要更多的技巧,等以后有时间了再写怎么爬取这两个网站的。最后附上镇宇镇楼
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Ethan10241036/article/details/107556531