• 如何高效地爬取链家的房源信息(二)


    Python实现的链家网站的爬虫第二部分。


    本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用。


    本系列第一部分:

    如何高效地爬取链家的房源信息(一)


    本文是第二部分,爬取小区信息并存入数据库,部分代码依赖于第一部分。


    在前文中已经获取了大区域的URL,接下来只需要遍历各个URL即可爬下所有小区信息:

    # 爬下所有的小区信息

    for regionurl in regionurls:

        do_xiaoqu_spider(db_xq, regionurl)


    对一个区内的所有小区进行爬取,需要分页:

    def do_xiaoqu_spider(db_xq, url=u"https://nj.lianjia.com/xiaoqu/gulou/"):

        """

        爬取大区域中的所有小区信息

        """

        try:

            req = urllib.request.Request(url, headers=hds[random.randint(0, len(hds) - 1)])

            source_code = urllib.request.urlopen(req, timeout=5).read()

            plain_text = source_code.decode('utf-8'); 

            soup = BeautifulSoup(plain_text,"html.parser")

        except (urllib.request.HTTPError, urllib.request.URLError) as e:

            print(e)

            return

        except Exception as e:

            print(e)

            return


        d = "d="+soup.find('div', {'class': 'page-box house-lst-page-box'}).get('page-data')

        loc = {}

        glb = {}

        exec(d, glb, loc);

        total_pages = loc['d']['totalPage']



        threads = []

        for i in range(total_pages):

            url_page = url+u"pg%d/" % (i + 1);

            print(url_page);

            t = threading.Thread(target=xiaoqu_spider, args=(db_xq, url_page))

            threads.append(t)

        for t in threads:

            t.start()

        for t in threads:

            t.join()

        print(u"爬下了 %s 区全部的小区信息" % url)



    爬取单个页面内的小区信息:

    def xiaoqu_spider(db_xq, url_page=u"https://nj.lianjia.com/xiaoqu/gulou/pg1/"):

        """

        爬取页面链接中的小区信息

        """

        try:

            req = urllib.request.Request(url_page, headers=hds[random.randint(0, len(hds) - 1)])

            source_code = urllib.request.urlopen(req, timeout=10).read()

            plain_text = source_code.decode('utf-8');  

            soup = BeautifulSoup(plain_text,"html.parser")

        except (urllib.request.HTTPError, urllib.request.URLError) as e:

            print(e)

            exit(-1)

        except Exception as e:

            print(e)

            exit(-1)


        xiaoqu_list = soup.findAll('li', {'class': 'clear xiaoquListItem'})

        for xq in xiaoqu_list:

            info_dict = {}

            title = xq.find('div', {'class': 'title'});

            info_dict.update({u'小区名称': title.text})

            d=title.findAll('a')

            for item in d:

                href = item['href'];

                info_dict.update({u'url': href})


            postioninfo = xq.find('div', {'class': 'positionInfo'}).renderContents().strip().decode('utf-8');

            content = "".join(postioninfo.split())

            info = re.match(r".+district.+>(.+)</a>.+bizcircle.+>(.+)</a>(.+)", content)

            if info:

                info = info.groups()

                info_dict.update({u'大区域': info[0]})

                info_dict.update({u'小区域': info[1]})

                info_dict.update({u'建造时间': info[2]})

            command = gen_xiaoqu_insert_command(info_dict)

            db_xq.execute(command, 1)


    爬取的小区信息将被存储到数据库表中,供后续使用。




    在接下来将说明如何爬取在售二手房信息、历史成交二手房信息,敬请期待。


    640?wx_fmt=jpeg

    长按进行关注。


  • 相关阅读:
    【新】idea激活码,jetbrains全系列最新2020激活码和破解补丁(亲测可用),可免费使用69年
    分享【高热度网】最火热的10篇文章,每一篇都是精品
    什么是高热度网(gaoredu.com)?高热度网站都有哪些功能?
    【高热度网】2020年最新8款迷你世界手机黑科技辅助软件免费下载
    【我爱科技论坛】关于我爱科技论坛解压密码的说明
    《前端工程师面试宝典》---前端面试必备
    【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)
    【数据结构】队列实现的5种方式及时间复杂度对比分析
    解决Webpack中提示syntax 'classProperties' isn't currently enabled的错误
    如何配置静态MAC地址
  • 原文地址:https://www.cnblogs.com/protosec/p/11673337.html
Copyright © 2020-2023  润新知