美文网首页
python爬虫实战——爬取北京地区短租房信息(基于BS4)

python爬虫实战——爬取北京地区短租房信息(基于BS4)

作者: libdream | 来源:发表于2018-12-26 10:17 被阅读0次

    目标

    爬取小猪短租网北京地区短租房13页的信息,包括标题、地址、价格、房东名称、房东性别和房东头像的链接。

    爬虫思路分析

    (1)手动浏览小猪短租网北京地区(http://bj.xiaozhu.com/),往后翻页查看url地址构造,发现第2-4页的url地址分别是:

    http://bj.xiaozhu.com/search-duanzufang-p2-0/
    
    http://bj.xiaozhu.com/search-duanzufang-p3-0/
    
    http://bj.xiaozhu.com/search-duanzufang-p4-0/
    

    不难看出url地址的规律,将p后面的数字改为1http://bj.xiaozhu.com/search-duanzufang-p1-0/),发现可以正常打开第一页,因此,只要修改p后面的数字就可以构造出待爬取的13页url

    image

    (2)本次要爬取的信息在详细页面,因此需要先爬取详细页面的网址链接,进而爬取需要的数据。

    右击第一个房源图片,点击审查元素,可以找到第一个房源详细页面的链接是"http://bj.xiaozhu.com/fangzi/31059118103.html"。老办法,右击该链接,选择Copy > Copy selector ,得到selector选择器的目标“#page_list > ul > li:nth-child(1) > a”。同样的办法,得到第二个房源的链接selector选择器的目标是"#page_list > ul > li:nth-child(2) > a",第三个是"#page_list > ul > li:nth-child(3) > a",我们可以使用“#page_list > ul > li > a”得到所有的超链接列表,再循环遍历得到每一个房源的链接。

    范例代码如下:

    import requests
    from bs4 import BeautifulSoup
    import time
    
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
    (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    
    def judgementSex(class_name):
        #判断性别
        if class_name == ['member_ico']:
            return '女'
        else:
            return '男'
        pass
    
    def getLinks(url):
        #获取详细页URL
        r = requests.get(url, headers=headers)
        soup = BeautifulSoup(r.text, 'lxml')
        links = soup.select('#page_list > ul > li > a')  #links为url列表(注意>符号两边都有空格,没有空格会出错)
        for link in links:
            href = link.get('href')
            getInfo(href)          #循环出的url依次调用getInfo()函数获取房源详细信息
        pass
    
    def getInfo(url):
        #获取房源详细信息
        r = requests.get(url, headers=headers)
        soup = BeautifulSoup(r.text, 'lxml')
        titles = soup.select('div.pho_info > h4')
        addresses = soup.select('span.pr5')
        prices = soup.select('#pricePart > div.day_l > span')
        imgs = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > a > img')
        names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
        sexs = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > div')
        for title,address,price,img,name,sex in zip(titles,addresses,prices,imgs,names,sexs):
            data = {
                'title':title.get_text().strip(),
                'address':address.get_text().strip(),
                'price':price.get_text(),
                'img':img.get('src'),
                'name':name.get_text(),
                'sex':judgementSex(sex.get('class')),
                }
            print(data)
        pass
    
    #主函数
    if __name__ == '__main__':
        #构造多页URL
        urls = ["http://bj.xiaozhu.com/search-duanzufang-p{}-0/".format(number) for number in range(1,14)]
        for single_url in urls:
            print('正在爬取'+single_url)
            getLinks(single_url)  #循环调用getLinks()函数
            time.sleep(2)
    
    image

    相关文章

      网友评论

          本文标题:python爬虫实战——爬取北京地区短租房信息(基于BS4)

          本文链接:https://www.haomeiwen.com/subject/cugclqtx.html