题目
爬取http://bj.xiaozhu.com/ 中北京地区短租房13页的信息(标题、地址、价格、房东名称、房东性别和房东头像的链接)。
注意:这个小猪网址,第一次打开需要验证,所以先在浏览器上打开这个网页,完成验证后,再运行代码,以及多次爬取后,可能需要再次打开网页进行验证。
code
import requests
from bs4 import BeautifulSoup
import pandas as pd
#拼接好13个网页的网址
def generate_urls(url):
urls_list = []
urls_list.append(url)
for i in range(2, 14):
url_str = url + "search-duanzufang-p" + str(i) + "-0/"
urls_list.append(url_str)
return urls_list
#传入网址,获得每个网页中的租房信息链接
def get_rent_urls(url):
rent_urls_list = []
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'referer': url}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
links = soup.select('#page_list > ul > li> a')
for link in links:
rent_urls_list.append(link.get("href"))
return rent_urls_list
#进入每个链接,爬取需要的信息
def get_url_info(url):
info_list = []
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'referer': url}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
title = soup.select('div.pho_info > h4 >em')
address = soup.select('div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span')
price = soup.select('#pricePart > div.day_l > span')
name = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
sex = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span')
image = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > a > img')
info_list.append(title[0].get_text().strip())
info_list.append(address[0].get_text().strip())
info_list.append(price[0].get_text())
info_list.append(name[0].get_text())
sex = sex[0].get("class")
if sex == ['member_girl_ico']:
info_list.append('女')
elif sex == ['member_boy_ico']:
info_list.append('男')
else:
info_list.append('性别不明')
info_list.append(image[0].get("src"))
return info_list
if __name__ == "__main__":
urls_list = generate_urls('http://bj.xiaozhu.com/')
all_urls = []
for url in urls_list:
all_urls.extend(get_rent_urls(url))
info_df = pd.DataFrame(columns=['title', 'address', 'price', 'name', 'sex', 'link'])
for i, rent_url in enumerate(all_urls):
info_df.loc[i] = get_url_info(rent_url)
print(info_df)
info_df.to_excel('rent_infos.xlsx')
title address price name sex \
0 工体整套房源,东大桥地铁/三里屯太古里/簋街 北京市朝阳区工人体育场东路小区甲1号楼 388 Tina1110 男
1 大悠自然|故宫天坛金融街地铁口超大空间美居 北京市丰台区草桥欣园四区9号楼 508 fragrant 女
2 简约主题民宿1新宫地铁,万达广场汇聚中心 北京市丰台区公园懿府2号楼3单元 318 杜佳娟 女
3 【1分钟进地铁】适合家庭西三环花园桥全明两居 北京市海淀区七贤村小区2号楼 408 PeanutLiu 女
4 限时优惠-霍营地铁站【美兔】超赞夜景落地窗房 北京市昌平区国风美唐综合楼4号楼 350 小兔温馨民宿 女
.. ... ... ... ... ..
295 古北水镇清新亲子房双床标间馥郁民宿【四喜】 北京市密云区古北口镇汤河村中街 398 馥郁民宿 女
296 西二旗(13号线)上地、联想、百度、小米 北京市海淀区西二旗大街**新硅谷 660 艾洛络 女
297 【长租优惠】三里屯 国贸呼家楼地铁0距离两居 北京市朝阳区团结湖南里 528 好孩子旺仔 男
298 生命科学园地铁长城北大国际医院华北电力大学 北京市昌平区北清路一号院8号楼 398 基督山伯爵127 男
299 地铁上岸站长安天街豪奢复式148平双面采光 北京市门头沟区泰安路13号远洋新天地 608 高端大气豪奢户型 男
link
0 https://image.xiaozhustatic1.com/21/23,0,92,10...
1 https://image.xiaozhustatic1.com/21/6,0,96,133...
2 https://image.xiaozhustatic1.com/21/23,0,86,14...
3 https://image.xiaozhustatic1.com/21/21,0,79,42...
4 https://image.xiaozhustatic1.com/21/51,0,25,29...
.. ...
295 https://image.xiaozhustatic1.com/21/51,0,71,11...
296 https://image.xiaozhustatic1.com/21/15,0,73,19...
297 https://image.xiaozhustatic1.com/21/12,0,39,30...
298 https://image.xiaozhustatic1.com/21/12,0,22,81...
299 https://image.xiaozhustatic1.com/21/23,0,74,15...
[300 rows x 6 columns]