python爬虫--新手上路--房产网指定区域楼盘信息爬取

本文记录了一位Python初学者尝试爬取房产网站数据的历程。通过requests模块和BeautifulSoup4解析网页,实现了简单爬虫,获取指定区域楼盘信息。虽然过程简单,但展现了爬虫的基础应用,以及数据清洗与提取的可能性。

差不多半年前就开始接触python语言,虽然前几天听说python作者已经不再维护python,但是核心的开源维护者还是有的,而且我并没有深入的像使用java一样实战过python,不能妄下断言。出于对现在互联网数据的重要性的思考,我觉得有必要深入了解一下爬虫这个东西,而且现在市面上资源最多的就是python爬虫,java的nutch我也了解过,但是好像是结合hadoop和搜索引擎一起使用的,不太适合我,我就想试试像网上好多人甚至好多书都实战的爬取一些日常网站数据,体验一下爬虫的魅力以及实际价值到底在哪里。

本来不想写博客这个东西的,不过今天帮同事弄一tomcat的时候,用到linux主机以及一些tomcat的配置,惊恐的发现,,都忘了,各种去百度命令,搞了两个小时,真是,,,无颜面对曾经的自己啊,痛定思痛,还是把日常自己不管是工作还是学习记录下来比较好,毕竟好记性不如烂笔头,说到这,,我自己的记事本还没开工呢。。 - -!

本次爬取没有采用任何框架,也就是用到了常用的requsts模块,beautifulsoup4, lxml, chardet(获取爬取回来的页面的编码),个人感觉还是很简单的,简单记录一下吧,涉及到的python知识点也会记录一下。

 

1. 先说一下思路,首先得找到你想要爬取数据的主页,比如说" http://www.ljia.net/new/v3-1.html ”,然后就是想办法模拟一下浏览器做的操作,发送get请求,获取响应的内容,类似如下代码

import chardet
import requests
from bs4 import BeautifulSoup


# 获取百度百科的URL规则 https://baike.baidu.com/item/python 这一部分就是可以搜索的出出来的关键字/item/python
base_url = 'http://www.ljia.net/new/v3-1.html'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
headers = {'User-Agent': user_agent}

response = requests.get(base_url, headers=headers)
# 利用chardet模块获取响应内容的编码,并设置response 防止乱码
response.encoding = chardet.detect(response.content)['encoding'] 
print(response.text)

2. 既然能获取到响应的内容就可以使用文本解析工具进行解析以及数据抽取了,我并没有逐个测试各个工具的性能问题,直接使用的beautifulsoup4,  不过就目前来讲,我觉得使用起来很麻烦,可能还没有深入研究吧,不过冗余的代码并不多,能实现初步的功能,后面慢慢完善优化吧。

# 使用beautifulsoup 解析页面并提取想要的数据
soup = BeautifulSoup(response.text, 'lxml')

for block in soup.select('.conlist .cf'):  # 遍历主内容区
    for name in block.select('.boxText h3 a'):  # 获取小区名字
        print("小区名称 -->  %s " % name.string)

3. 接下来就是想办法获取到想要抓取的全部数据,仅限于当前网站,也就是分页的内容,我觉得我爬取的这两个网站的“下一页”URL都是简单的不行那种,比如第二页的内容是"http://www.ljia.net/new/v3-1,p-2.html", 依次类推第三页就是"http://www.ljia.net/new/v3-1,p-3.html",so easy...

# 获取全部的内容, 共27页  分页形式如下: http://www.ljia.net/new/v3-1,p-2.html
fenye_url = 'http://www.ljia.net/new/v3-1,p-2.html'
for i in range(2, 27):
    response = requests.get('http://www.ljia.net/new/v3-1,p-%d.html' % i, headers=headers)
    response.encoding = chardet.detect(response.content)['encoding']
    soup = BeautifulSoup(response.text, 'lxml')

    for block in soup.select('.conlist .cf'): # 遍历主内容区
        for name in block.select('.boxText h3 a'): # 获取小区名字
            print("小区名称 -->  %s " % name.string)

至此整个小爬虫就结束了,可以说是相当简单单了,不过数据的确是爬取下来了,而且可以拿到很多有用的数据,如果可以的话,可以自己把得到的数据进行自定义的清洗和提取,得到自己想要的结果;我也算是初步体验了一下,虽然有很多要完善的地方,比如重复代码的封装,代码的执行效率等,慢慢来吧...

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值