動(dòng)手寫(xiě)爬蟲(chóng)(2):爬取58同城二手物品信息

工作這么多年一直想學(xué)習(xí)一下爬蟲(chóng)技術(shù)放接,各種嘗試之后發(fā)現(xiàn)學(xué)習(xí)的最好方式就是直接開(kāi)干:那就找一個(gè)想爬的東西開(kāi)始爬笆畲唷声怔!
從模仿用正則表達(dá)式爬取逛犹,到現(xiàn)在通過(guò)網(wǎng)絡(luò)課程學(xué)習(xí)使用BeatifulSoup庫(kù)來(lái)爬取信息闽撤,大概花了一個(gè)月左右的零散時(shí)間得哆,感覺(jué)還是有些進(jìn)步的,得記錄一下哟旗,現(xiàn)在就分享一下58同城二手物品信息的爬取過(guò)程贩据。

1.分析爬取目標(biāo)頁(yè)面與目標(biāo)

58同城二手物品頁(yè)面開(kāi)始,爬取該頁(yè)面中二手物品詳細(xì)信息闸餐。
詳細(xì)信息分布在子頁(yè)面中饱亮,故,需要先從主頁(yè)面獲取子頁(yè)面的鏈接舍沙,再?gòu)淖禹?yè)面中獲取我們的目標(biāo)信息近上。這樣把爬取過(guò)程分成了兩部分:
- 爬主頁(yè)面獲取二手物品子頁(yè)面的信息;
-爬取子頁(yè)面(頁(yè)面示例)獲取對(duì)應(yīng)二手物品的標(biāo)題场勤、價(jià)格戈锻、成色、區(qū)域和媳、發(fā)布日期格遭、類(lèi)別等信息。
對(duì)應(yīng)的留瞳,我們查看對(duì)應(yīng)的頁(yè)面拒迅,**確定所需要爬取的元素在對(duì)應(yīng)頁(yè)面中所處的位置、確定獲取方式她倘。

2. 爬取主頁(yè)面中的二手物品鏈接

通過(guò)chrome檢查主頁(yè)面璧微,在對(duì)應(yīng)二手物品標(biāo)題位置右鍵、檢查硬梁,查看鏈接對(duì)應(yīng)的網(wǎng)頁(yè)元素位置前硫,復(fù)制對(duì)應(yīng)的位置表述,如下:

復(fù)制結(jié)果即是對(duì)應(yīng)的鏈接位置表述:

infolist > table:nth-child(7) > tbody > tr:nth-child(2) > td.t > a

由于網(wǎng)頁(yè)構(gòu)成中td標(biāo)簽荧止、t樣式下的a標(biāo)簽對(duì)應(yīng)的內(nèi)容都是子頁(yè)面鏈接屹电,故可以用‘td.t > a’作為篩選條件,通過(guò)BeautifulSoup中的select方法對(duì)其進(jìn)行篩選跃巡。代碼見(jiàn)最后部分危号。(注:代碼中對(duì)業(yè)面中的一些特殊物品類(lèi)別進(jìn)行了剔除,包括轉(zhuǎn)轉(zhuǎn)頁(yè)面素邪、推薦信息部分等)

3. 爬取子頁(yè)面中物品詳細(xì)信息

將上一步獲取的子頁(yè)面鏈接傳遞給
過(guò)程與提取主頁(yè)面中鏈接是一樣的外莲,不過(guò)這次需要提取的元素多了一些,我們按上述過(guò)程逐個(gè)檢查兔朦,確定元素對(duì)應(yīng)的篩選表述偷线。
最后通過(guò)get_text等方式磨确,將所需信息從爬取的元素中提取出來(lái)。

4.完整的python代碼

from bs4 import BeautifulSoup
import time
import requests

url_58 = 'http://bj.58.com/pbdn/0/'

def get_url_list(url):
    web_data = requests.get(url)
    soup = BeautifulSoup(web_data.text,'lxml')
    url = soup.select('td.t > a[class="t"]')
    url_list = ''
    for link in url:
        link_i = link.get('href')
        if 'zhuanzhuan'in link_i:
           pass
        else:
            if 'jump' in link_i:
                pass
            else:
                url_list = url_list + '\n'+link_i
    print('urllist',url_list)
    return url_list

def get_info():
    url_list = get_url_list(url_58)
    for url in url_list.split():
        time.sleep(1)
        web_data = requests.get(url)
        soup = BeautifulSoup(web_data.text,'lxml')

        type = soup.select('#header > div.breadCrumb.f12 > span:nth-of-type(3) > a')
        title = soup.select('div.col_sub.mainTitle > h1')
        date = soup.select('li.time')
        price = soup.select('div.person_add_top.no_ident_top > div.per_ad_left > div.col_sub.sumary > ul > li:nth-of-type(1) > div.su_con > span.price.c_f50')
        fineness = soup.select('div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span')
        area = soup.select('div.col_sub.sumary > ul > li:nth-of-type(3) > div.su_con > span')

        #print(type,title,date,price,fineness,area)

        for typei,titlei,datei,pricei,finenessi,areai in zip(type,title,date,price,fineness,area):
            data = {
                'type':typei.get_text(),
                'title':titlei.get_text(),
                'date':datei.get_text(),
                'price':pricei.get_text(),
                'fineness':(finenessi.get_text()).strip(),
                'area':list(areai.stripped_strings)
            }
            print(data)

get_info()

5.最終結(jié)果樣例

{'area': ['通州', '-', '物資學(xué)院路'], 'title': 'iPad mini 2 Wi-Fi 16G 白色 港版', 'date': '2016-05-07', 'type': '北京二手平板電腦', 'fineness': '-', 'price': '1200'}
{'area': ['西城', '-', '西單'], 'title': 'iPad2 16G 國(guó)行 WiFi 平板電腦', 'date': '2016-05-07', 'type': '北京二手平板電腦', 'fineness': '-', 'price': '900'}

6.總結(jié)

其實(shí)從網(wǎng)頁(yè)中提取對(duì)應(yīng)元素并不復(fù)雜淋昭,麻煩的是反爬俐填、對(duì)目標(biāo)信息進(jìn)行提取(get_text安接、stripped_strings等等方法還需要繼續(xù)研究一下)翔忽,以及對(duì)整個(gè)爬取過(guò)程的控制:通常我們要獲取的信息都不止在一個(gè)頁(yè)面上,這就需要一個(gè)好的過(guò)程調(diào)度盏檐,保證爬取效率歇式。

以上僅供學(xué)習(xí),請(qǐng)勿用于商業(yè)用途胡野。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末材失,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子硫豆,更是在濱河造成了極大的恐慌龙巨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊响,死亡現(xiàn)場(chǎng)離奇詭異旨别,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)汗茄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)秸弛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人洪碳,你說(shuō)我怎么就攤上這事递览。” “怎么了瞳腌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵绞铃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嫂侍,道長(zhǎng)儿捧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任吵冒,我火速辦了婚禮纯命,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痹栖。我一直安慰自己亿汞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布揪阿。 她就那樣靜靜地躺著疗我,像睡著了一般咆畏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吴裤,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天旧找,我揣著相機(jī)與錄音,去河邊找鬼麦牺。 笑死钮蛛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剖膳。 我是一名探鬼主播魏颓,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吱晒!你這毒婦竟也來(lái)了甸饱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仑濒,失蹤者是張志新(化名)和其女友劉穎叹话,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體墩瞳,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驼壶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矗烛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辅柴。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞭吃,靈堂內(nèi)的尸體忽然破棺而出碌嘀,到底是詐尸還是另有隱情,我是刑警寧澤歪架,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布股冗,位于F島的核電站,受9級(jí)特大地震影響和蚪,放射性物質(zhì)發(fā)生泄漏止状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一攒霹、第九天 我趴在偏房一處隱蔽的房頂上張望怯疤。 院中可真熱鬧,春花似錦催束、人聲如沸集峦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)塔淤。三九已至摘昌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間高蜂,已是汗流浹背聪黎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留备恤,地道東北人稿饰。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烘跺,于是被迫代替她去往敵國(guó)和親湘纵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脂崔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容