爬取自如网站杭州市的租房信息
最近看到自如网的整体网页结构比较简洁,因此尝试获取一下杭州市的租房情况,简单做一个分析。
- 需要获取的内容如图所示
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\n')
#一共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('{},{},{},{},{}\n'.format(apartment,area,size,dis_to_subway,price))
end=time.clock()
print('time cost:%.3f s' % (end-start)) #时间消耗
输出:
time cost:37.350 s