zoukankan      html  css  js  c++  java
  • 爬取自如网站杭州市的租房信息

    爬取自如网站杭州市的租房信息

    最近看到自如网的整体网页结构比较简洁,因此尝试获取一下杭州市的租房情况,简单做一个分析。

    • 需要获取的内容如图所示

    1.获取网页内容

    web_url='http://hz.ziroom.com/z/nl/z2.html?p=1'
    #对一些需要登录的网站,如果不是从浏览器发出的请求,得不到响应,所以需要将爬虫程序发出的请求伪装成浏览器。
    headers ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
                                        'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 		  						   Safari/537.36'}
    req=urlrequest.Request(url=web_url,headers=headers)
    web_page=urlrequest.urlopen(req).read()
    content=web_page.decode('utf8') #中文解码
    #print(content)
    

    2.找到有效信息所在标签

    soup=BeautifulSoup(content,'html.parser')
    soup_valid=soup.find(id="houseList")
    all_divs=soup_valid.find_all('li')
    print(all_divs[0].prettify())
    
    • 获取内容的部分截图

    标签截图

    #符合要求的标签数量
    len(all_divs)
    

    输出:

    18

    3.整理标签内容

    print('apartment|area|size|dis_to_subway|price')
    for div in all_divs:
        apartment=div.find(class_="t1").get_text().split()[2]
        area=div.find('h4').get_text()
        size=div.find(class_="detail").find('span').get_text()
        dis_to_subway=div.find(class_="detail").find_all('span')[3].get_text()
        price=div.find(class_="price").get_text().split()[1]
        print('{},{},{},{},{}'.format(apartment,area,size,dis_to_subway,price))
    
    • 单页爬取结果打印

    单页爬取结果

    爬取杭州市所有租房信息,并存入文件的完整代码如下:

    import urllib.request as urlrequest
    from bs4 import BeautifulSoup
    import time
    
    start=time.clock()
    web_url='http://hz.ziroom.com/z/nl/z2.html?p={}'
    headers ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
                                        'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    #把租房信息存入文件中
    with open('rent_data.csv','w')as outfile:
        outfile.write('apartment,area,size,dis_to_subway,price
    ')
        #一共50页
        for i in range(1,51,1):
            req=urlrequest.Request(url=web_url.format(i),headers=headers)
            web_page=urlrequest.urlopen(req).read()
            content=web_page.decode('utf8')
            #找到有效信息所在标签
            soup=BeautifulSoup(content,'html.parser')
            soup_valid=soup.find(id="houseList")
            all_divs=soup_valid.find_all('li')
            for div in all_divs:
                apartment=div.find(class_="t1").get_text().split()[2]
                area=div.find('h4').get_text()
                size=div.find(class_="detail").find('span').get_text()
                dis_to_subway=div.find(class_="detail").find_all('span')[3].get_text()
                price=div.find(class_="price").get_text().split()[1]
                outfile.write('{},{},{},{},{}
    '.format(apartment,area,size,dis_to_subway,price))
    end=time.clock()
    print('time cost:%.3f s' % (end-start)) #时间消耗
    

    输出:

    time cost:37.350 s

  • 相关阅读:
    Coalesce (MS SQL Server)——取指定内容(列)中第一个不为空的值
    SQL 函数NULLIF、NULL、ISNULL、COALESCE、IIF
    oracle 分组后取每组第一条数据
    oracle判断是否包含字符串的方法
    Oracle 查询字段不包含多个字符串方法
    [oracle] to_date() 与 to_char() 日期和字符串转换
    Oracle中保留两位小数
    Oracle 树操作、递归查询(select…start with…connect by…prior)
    联合查询更新表数据
    WCF 之 生成元数据和代理
  • 原文地址:https://www.cnblogs.com/toastavocado/p/8970584.html
Copyright © 2011-2022 走看看