爬取北京地区短租房信息

题目

爬取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]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值