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

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

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

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

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

原文地址:https://www.cnblogs.com/toastavocado/p/8970584.html