吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7314|回复: 33
收起左侧

[Python 转载] 分享一个爬虫,获取房地产网(anjuke)一手房信息

  [复制链接]
龙小 发表于 2020-3-20 22:31
本帖最后由 龙小 于 2020-3-21 08:20 编辑

先上图:
image.png
下面是正菜,大概意思就是获取售房信息并保存到文件
[Python] 纯文本查看 复制代码
import urllib.request
from bs4 import BeautifulSoup
import time
import os
class spiderdown(object):
    """description of class"""
    _headers=''
    _url=''
    _citylist=[]
    def set_headers(self,headers):
        self._headers = headers
    def set_url(self,url,citylist):
        self._url=url
        self._citylist=citylist
    def down_load_page(self,url):
        try:
            #此处可优化,后面修改成自动获取浏览器version信息
            headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
            req = urllib.request.Request(url=url,headers=headers)
        except:
            print('打开链接失败url:(%s)' % url)
        else:
            return urllib.request.urlopen(req,timeout=30)
    def parse_html(self,html):
        response1 = html.read().decode('utf-8').replace('price-txt','price')
        soup = BeautifulSoup(response1,'html.parser')
        listinfo = soup.find_all(class_='infos')
        listprice = soup.find_all(class_='favor-pos')
        #print(len(listprice),len(listinfo))
        infolist=[]
        for number in range(0,len(listinfo)):
           houseinfo=''
           if len(listinfo[number].select('.items-name'))!=0:
              houseinfo=houseinfo+(listinfo[number].select('.items-name')[0].get_text())
           else :
                houseinfo=houseinfo+("default")
           houseinfo=houseinfo+";"
           if len(listinfo[number].select('.list-map'))!=0:
               houseinfo=houseinfo+(listinfo[number].select('.list-map')[0].get_text())
           else :
               houseinfo=houseinfo+("default")
       
           houseinfo=houseinfo+";"
           for status in listinfo[number].select('.status-icon') :
               houseinfo=houseinfo+(status.get_text())
               houseinfo=houseinfo+","
           houseinfo=houseinfo+";"
       
           if len(listinfo[number].select('.group-mark')) != 0:
              houseinfo=houseinfo+(listinfo[number].select('.group-mark')[0].get_text())
           else :
              houseinfo=houseinfo+("default")
           houseinfo=houseinfo+";"
       
           if len(listprice[number].select('span'))!=0:
               houseinfo=houseinfo+(listprice[number].select('span')[0].get_text())
           else :
               houseinfo=houseinfo+('-1')
           print('获取城市住房销售信息成功:%s ' %  houseinfo)
           infolist.append(houseinfo+'\n')
        return infolist
    #保存文件按天进行保存
    def save_file(self,infolist):
        filename='house_indo_' + time.strftime('%Y%m%d',time.localtime())
        fp=''
        try:
            if os.path.exists('.\\data'):
                fp = open('.\\data\\'+filename,'a',encoding='utf-8')
                fp.writelines(infolist)
                fp.close()
            else:
                os.mkdir('.\\data')
                fp = open('.\\data\\'+filename,'a',encoding='utf-8')
                fp.writelines(infolist)
                fp.close()
        except Exception as e:
            print('保存文件失败,请检查错误信息 %s' % str(e))
            if fp != '':
                fp.close()
    def run_sprider(self):
        #1、获取链接(安居客)
        url_set = set()
        for city in self._citylist:
            url = self._url+city+'/'
            print('完成一个网页链接:%s' % url)
            url_set.add(url)
        #2、遍历链接,获取网页
        for url in url_set:
            print('开始爬取[%s]...' % url)
            html = self.down_load_page(url)
            if html.getcode() == 200:
                info_list=self.parse_html(html)
                self.save_file(info_list)
                print('一个批次爬取完成,休眠5秒.......')
                time.sleep(5)
            else:
                print('网页没有正确打开,请检查,网页返回码:(%d)' % html.getcode())


这里是APP信息:
[Python] 纯文本查看 复制代码
from spiderdown import spiderdown
if __name__=='__main__':
    try:
        jiwuApp = spiderdown()
        base_url='https://xm.fang.anjuke.com/loupan/'
        city_list=['tongan','xiangan','jimei','haicang','zhangzhougang','siming','huli','jiaomei','quanzhou','xiamenzhoushi']
        jiwuApp.set_url(base_url,city_list)
        jiwuApp.run_sprider()
    except Exception as e:
        print('爬取失败,错误信息:%s' % str(e))


喜欢就赞老夫吧。哈哈
附件:
public.7z (1.73 KB, 下载次数: 185)



免费评分

参与人数 4吾爱币 +4 热心值 +1 收起 理由
DR0822 + 1 我很赞同!
hom886 + 1 + 1 我很赞同!
stefaniema + 1 谢谢@Thanks!
太阳之眼 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 龙小 发表于 2020-3-21 08:07

数据量不大,没必要多线程。python的多线程有个弱点,不一定好。建议多进程
 楼主| 龙小 发表于 2020-5-18 16:24
xiaoz165748 发表于 2020-3-20 22:39
vethenc 发表于 2020-3-20 22:40
老夫耐你
getserver 发表于 2020-3-20 22:46
不支持多线程吗
A陈尘 发表于 2020-3-20 23:22
谢谢分享  试一下
 楼主| 龙小 发表于 2020-3-21 08:06
xiaoz165748 发表于 2020-3-20 22:39
楼主好,怎么使用啊?

安装:python 3.7 ,beautiful soup就好
sharokku4869 发表于 2020-3-21 14:56
感谢大佬分享这个爬虫
Sonnet 发表于 2020-3-21 18:39
感谢楼主分享
hnwang 发表于 2020-3-21 21:51
感谢分享 学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表