1-3homework

結果

爬取結果
__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': '北京市西城區德勝門內大街'
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容