龙空技术网

网络爬虫,爬取二手房源

从事java的小白 156

前言:

如今小伙伴们对“python爬取二手房信息”大概比较关心,朋友们都想要了解一些“python爬取二手房信息”的相关内容。那么小编同时在网摘上汇集了一些关于“python爬取二手房信息””的相关资讯,希望我们能喜欢,各位老铁们一起来学习一下吧!

一、相信有很多朋友在学习python后,一定都有过使用这门语言编写爬虫的想法。刚刚学习了python的小白(因为很白所以叫小白)我也是如此。这里小白和小白的伙伴就以python新手的身份分享一下我们使用python爬虫爬取二手房网的房源信息的过程。如有大佬路过,求大佬指出其中需要改进的地方,小白我感激不尽。

编写爬虫之前,我们首先应该搞清楚爬虫到底是干什么的。这里语言表达力不足的小白只好借用度娘上的答案向大家介绍一下:

网络爬虫,又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

大概了解爬虫后,我们就要开始做编写爬虫的准备工作了。首先是我们已经确定是用python语言进行编写,然后我们就要确定使用什么开发平台和环境了,这里,小白使用的是Windows平台 (准备之前查了一些资料,看到一些大佬说就开发而言,linux比windows用起来舒服,所以大家也可以试试linux),开发环境是pycharm2021社区版(开始下载了专业版,但是发现每天打开都需要输入激活码,并且对于我们一般人来说社区版也够用了,于是重新下载了社区版)。

接下来应该就是要准备编写爬虫了,其实,在小白看来,编写爬虫其实就是各种库的应用。首先说一下我们的大概思路:爬取数据——解析数据——存储数据。第一步我们需要安装我们需要的库,安装方法网上很多,这里就不具体说了。接下来是导入我们需要的库,导入库的语句为 import +库;例如在我的代码中需要的库导入如下:

# -*- coding: utf-8 -*-from urllib import requestimport reimport timeimport threadingimport randomimport pymysqlfrom hashlib import md5#from ua_info import ua_listfrom fake_useragent import UserAgentimport sysclass study():    def __init__(self):        self.url='{}/'    # 1.请求函数    def get_html(self, url):        ua=UserAgent()        #print(ua.chrome)        headers = {'User-Agent': ua.chrome}        req = request.Request(url=url, headers=headers)        res = request.urlopen(req)        # 本网站使用utf8的编码格式        html = res.read().decode('utf8', 'ignore')        return html    # 2.正则解析函数    def re_func(self,re_bds,html):        pattern = re.compile(re_bds,re.S)        r_list = pattern.findall(html)        return r_list    # 格式化,正则表达式匹配页面    def parse_html(self,one_url):        # 调用请求函数,获取一级页面        one_html = self.get_html(one_url)        #print(one_html)        #re_bds = '<a class="" .*?data-el="ershoufang".*?>(.*?)</a>'        #re_bds='<div class="info clear">.*?</div>'        #re_bds='<div class="title"><a.*?data-el="ershoufang".*?>(.*?)</a>.*?<span class="goodhouse_tag tagBlock">(.*?)</span></div>'        re_bds='<div class="info clear"><div class="title"><a.*?data-el="ershoufang".*?>(.*?)</a>.*?<span class="goodhouse_tag tagBlock">(.*?)</span></div><div class="flood"><div class="positionInfo"><span class="positionIcon"></span><a .*?data-el="region">(.*?)</a>   -  <a href="(.*?)/" target="_blank">(.*?)</a> </div></div><div class="address"><div class="houseInfo"><span class="houseIcon"></span>(.*?)</div></div><div class="followInfo"><span class="starIcon"></span>(.*?)</div><div class="tag">(.*?)</div><div class="priceInfo"><div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div><div class="unitPrice".*?><span>(.*?)</span></div></div></div>'        link_list = self.re_func(re_bds,one_html)        print(link_list)        for link in link_list:            print (link)            print(100*'*')    #对于部分正常可以获取到最大页码数,可以采用    def get_max_page(self,one_url):        one_html = self.get_html(one_url)        print(one_html)        re_bds = '<a href="/ershoufang/pg(.*?)" data-page="(.*?)">(.*?)</a>'        print(re_bds)        link_list = self.re_func(re_bds,one_html)        #print(link_list)        return link_list[link_list.__len__()-1][1];    def run(self):        for i in range(100):            url = self.url.format(i)            #定时抓取当前最新的数据            self.parse_html(url)        # 输出当地时间        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))          # 设置一个定时器,循环输出时间        timer = threading.Timer(6*60*60, self.run)          # 启动线程        timer.start()         #self.parse_html(';)if __name__ == '__main__':    spider = study()    spider.run()    

标签: #python爬取二手房信息