美文网首页
1-3homework

1-3homework

作者: OldSix1987 | 来源:发表于2016-08-13 00:54 被阅读51次

    结果

    爬取结果
    __author__ = 'CP6'
    
    from bs4 import BeautifulSoup
    import requests
    import time
    
    url = 'http://bj.xiaozhu.com/fangzi/3781218930.html'
    urls = ['http://bj.xiaozhu.com/zhengzu-duanzufang-p{}-0/'.format(str(i)) for i in range(1, 10)]
    
    '''
    http://bj.xiaozhu.com/zhengzu-duanzufang-p1-0/
    http://bj.xiaozhu.com/zhengzu-duanzufang-p2-0/
    
    '''
    
    def getRentGender(className):
        if className == ['member_boy_ico']:
            return '男'
        elif className == ['member_girl_ico']:
            return '女'
    
    def getRentGender2(className):
        if ''.join(className).find('girl') != -1 :
            return '男'
        else :
            return '女'
    
    def getLinks(url,data=None):
        wb_data = requests.get(url)
        soup = BeautifulSoup(wb_data.text, 'lxml')
        links = soup.select('#page_list > ul > li > a')
    
        for link in links:
            getDetailInfo(link.get('href'))
    
    
    def getDetailInfo(url,data=None):
        wb_data = requests.get(url)
        soup = BeautifulSoup(wb_data.text, 'lxml')
        time.sleep(3)
        titles = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em')
        addresses = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span')
        prices = soup.select('div.day_l > span')
        imgs = soup.select('#curBigImage')
        rentimgs = soup.select('div.js_box.clearfix > div.member_pic > a > img')
        names = soup.select('div.js_box.clearfix > div.w_240 > h6 > a')
        genders = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span')
        # print(genders)
        # print(genders.get_text().find('girl'));
    
        for title,address,price,img,rentimg,name,gender in zip(titles,addresses,prices,imgs,rentimgs,names,genders):
            data = {
                'title':title.get_text(),
                'address':address.get_text().split(),
                'price':price.get_text(),
                'img':img.get('src'),
                'rentimgs':rentimg.get('src'),
                'name':name.get_text(),
                # 'gender':getRentGender(gender.get('class'))
                'gender':getRentGender2(gender)
            }
            print(data)
    
    # getDetailInfo(url)
    # print(urls)
    
    for single_url in urls:
        getLinks(single_url)
    
    # getLinks('http://bj.xiaozhu.com/zhengzu-duanzufang-p1-0/')
    # getDetailInfo('http://bj.xiaozhu.com/fangzi/3781218930.html')
    

    总结

    • 难点:性别区分

    Paste_Image1.png Paste_Image2.png

    检查源码可以看到就是一个span,直接爬取,然后get(‘class’)即可,根据获取到的className做一个判断。

    def getRentGender(className):
        if className == ['member_boy_ico']:
            return '男'
        elif className == ['member_girl_ico']:
            return '女'
    

    这里另外一个思路就是:根据className获取到其中的关于性别的subStr,含有boy就是男,含有girl就是女。

    def getRentGender2(className):
        if ''.join(className).find('girl') != -1 :
            return '男'
        else :
            return '女'
    

    先把一个list(其实就是className),转换成一个str,然后查找这个str中是否还有‘girl’(这里的判断其实不是很严谨,但是对于本例还是适用的。)

    • Python的结构化语法

    // 意思就是把一个str中的变化的部分,用{}替换,外部来更新说明它的变化方式。
    // 也就是{}被替换为一个str,这个str是[1, 10)的数字字符串
    urls = ['test{}test/'.format(str(i)) for i in range(1, 10)]
    

    一个复杂的字符串数组,用一行代码就完成了。

    • 去掉str后面的空格

    原始方法

    'address':address.get_text()
    'address': '北京市西城区德胜门内大街\n                                  '
    

    1. str.split()方法

    'address':address.get_text().split()
    'address': ['北京市西城区德胜门内大街'],
    

    2. stripped_strings

    'address':list(address.stripped_strings),
    'address': ['北京市西城区德胜门内大街']
    

    3. 前面2中方式都是变成list打印出来,strip可以去掉空格,保留str格式

    'address': address.get_text().strip(),
    'address': '北京市西城区德胜门内大街'
    

    相关文章

      网友评论

          本文标题:1-3homework

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