網(wǎng)絡(luò)爬蟲: 從allitebooks.com抓取書籍信息并從amazon.com抓取價格(2): 抓取allitebooks.com書籍信息及ISBN碼

這一篇首先從allitebooks.com里抓取書籍列表的書籍信息和每本書對應(yīng)的ISBN碼耗绿。

一砾隅、分析需求和網(wǎng)站結(jié)構(gòu)

allitebooks.com這個網(wǎng)站的結(jié)構(gòu)很簡單晴埂,分頁+書籍列表+書籍詳情頁。
要想得到書籍的詳細(xì)信息和ISBN碼精耐,我們需要遍歷所有的頁碼琅锻,進(jìn)入到書籍列表,然后從書籍列表進(jìn)入到每本書的詳情頁里惊完,這樣就能夠抓取詳情信息和ISBN碼了处硬。

二荷辕、從分頁里遍歷每一頁書籍列表

通過查看分頁功能的HTML代碼件豌,通過class="current"可以定位當(dāng)前頁碼所在span標(biāo)簽茧彤,此span標(biāo)簽的下一個兄弟a標(biāo)簽就是下一頁鏈接所在的標(biāo)簽躬审,
而通過對比最后一頁的span可以發(fā)現(xiàn),在最后一頁中遭殉,通過class="current"找到的span標(biāo)簽卻沒有下一個兄弟a標(biāo)簽博助。所以我們可以通過這一點(diǎn)判斷出是否已經(jīng)到最后一頁了富岳。代碼如下:

# Get the next page url from the current page url
def get_next_page_url(url):
    page = urlopen(url)
    soup_page = BeautifulSoup(page, 'lxml')
    page.close()
    # Get current page and next page tag
    current_page_tag = soup_page.find(class_="current")
    next_page_tag = current_page_tag.find_next_sibling()
    # Check if the current page is the last one
    if next_page_tag is None:
        next_page_url = None
    else:
        next_page_url = next_page_tag['href']
    return next_page_url

三、從書籍列表里找到詳情頁的鏈接

在書籍列表點(diǎn)擊書名或者封面圖都可以進(jìn)入詳情蚁飒,則書名和封面圖任選一個萝喘,這里選擇書名阁簸。


我們可以通過查找class="entry-title"定位到書名所在的h2標(biāo)簽启妹,然后通過此標(biāo)簽的a屬性即可獲得鏈接所在的a標(biāo)簽,再通過a標(biāo)簽的string屬性可得到鏈接桨啃。
代碼如下:

# Get the book detail urls by page url
def get_book_detail_urls(url):
    page = urlopen(url)
    soup = BeautifulSoup(page, 'lxml')
    page.close()
    urls = []
    book_header_tags = soup.find_all(class_="entry-title")
    for book_header_tag in book_header_tags:
        urls.append(book_header_tag.a['href'])
    return urls

四檬输、從書籍詳情頁里抓取標(biāo)題和ISBN碼

通過查看書籍詳情頁的HTML代碼褪猛,我們可以通過查找class="single-title"定位到標(biāo)題所在的h1標(biāo)簽獲得標(biāo)題,然后通過查找text="Isbn:"定位到"Isbn:"的所在的dt標(biāo)簽碳却,此標(biāo)簽的下一個兄弟節(jié)點(diǎn)就是書籍ISBN碼所在的標(biāo)簽,通過此標(biāo)簽的string屬性可獲得ISBN碼內(nèi)容馍资。
代碼如下:

# Get the book detail info by book detail url
def get_book_detail_info(url):
    page = urlopen(url)
    book_detail_soup = BeautifulSoup(page, 'lxml')
    page.close()
    title_tag = book_detail_soup.find(class_="single-title")
    title = title_tag.string
    isbn_key_tag = book_detail_soup.find(text="Isbn:").parent
    isbn_tag = isbn_key_tag.find_next_sibling()
    isbn = isbn_tag.string.strip() # Remove the whitespace with the strip method
    return { 'title': title, 'isbn': isbn }

五鸟蟹、將三部分代碼整合起來

def run():
    url = "http://www.allitebooks.com/programming/net/page/1/"
    book_info_list = []
    def scapping(page_url):
        book_detail_urls = get_book_detail_urls(page_url)
        for book_detail_url in book_detail_urls:
            # print(book_detail_url)
            book_info = get_book_detail_info(book_detail_url)
            print(book_info)
            book_info_list.append(book_info)
        next_page_url = get_next_page_url(page_url)
        if next_page_url is not None:
            scapping(next_page_url)
        else:
            return

    scapping(url)

運(yùn)行結(jié)果


六建钥、將結(jié)果寫入文件虐沥,以供下一步處理使用欲险。

def save_to_csv(list):
    with open('books.csv', 'w', newline='') as fp:
        a = csv.writer(fp, delimiter=',')
        a.writerow(['title','isbn'])
        a.writerows(list)

完整代碼請移步GitHub:https://github.com/backslash112/book_scraper_python
Beautiful Soup基礎(chǔ)知識:網(wǎng)絡(luò)爬蟲: 從allitebooks.com抓取書籍信息并從amazon.com抓取價格(1): 基礎(chǔ)知識Beautiful Soup
我們處于大數(shù)據(jù)時代,對數(shù)據(jù)處理感興趣的朋友歡迎查看另一個系列隨筆:利用Python進(jìn)行數(shù)據(jù)分析 基礎(chǔ)系列隨筆匯總

接下來一篇隨筆是根據(jù)獲取到的ISBN碼去amazon.com網(wǎng)站獲取每本書對應(yīng)的價格槐壳,并通過數(shù)據(jù)分析的知識對獲取的數(shù)據(jù)進(jìn)行處理喜每,最后輸出到csv文件灼卢。有興趣的朋友歡迎關(guān)注本博客来农,也歡迎大家留言討論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涩咖,一起剝皮案震驚了整個濱河市檩互,隨后出現(xiàn)的幾起案子咨演,更是在濱河造成了極大的恐慌,老刑警劉巖饵较,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍嵌,死亡現(xiàn)場離奇詭異,居然都是意外死亡循诉,警方通過查閱死者的電腦和手機(jī)横辆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茄猫,“玉大人狈蚤,你說我怎么就攤上這事』Γ” “怎么了脆侮?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阿浓。 經(jīng)常有香客問我,道長芭毙,這世上最難降的妖魔是什么筋蓖? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮退敦,結(jié)果婚禮上粘咖,老公的妹妹穿的比我還像新娘。我一直安慰自己侈百,他們只是感情好瓮下,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钝域,像睡著了一般讽坏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上例证,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天路呜,我揣著相機(jī)與錄音,去河邊找鬼织咧。 笑死胀葱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笙蒙。 我是一名探鬼主播抵屿,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捅位!你這毒婦竟也來了轧葛?” 一聲冷哼從身側(cè)響起搂抒,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朝群,沒想到半個月后燕耿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姜胖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年誉帅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右莱。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚜锨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慢蜓,到底是詐尸還是另有隱情亚再,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布晨抡,位于F島的核電站氛悬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耘柱。R本人自食惡果不足惜如捅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望调煎。 院中可真熱鬧镜遣,春花似錦、人聲如沸士袄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寓辱。三九已至,卻和暖如春赤拒,著一層夾襖步出監(jiān)牢的瞬間秫筏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工需了, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人般甲。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓肋乍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敷存。 傳聞我的和親對象是個殘疾皇子墓造,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

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