python爬蟲之爬取豆瓣top250圖書信息

先上代碼:

import requests
from bs4 import BeautifulSoup
import time

class top250books():
    def html(self, href):
        max_span = 225
        for page in range(0, int(max_span), 25):
            page_url = href + '?start=' + str(page)
            self.parse(page_url)

    def parse(self, url):
        html = self.request(url)
        all_tables = BeautifulSoup(html.text, 'lxml').find('div',  class_='indent').find_all('table')
        for table in all_tables:
            time.sleep(0.5)
            title = table.find('div', class_='pl2').find('a').get_text()
            info = table.find('p', class_='pl').get_text()
            rating_nums = table.find('span', class_='rating_nums').get_text()
            rating_people = table.find('span', class_='pl').get_text()
            quote = table.find('span', class_='inq').get_text()
            f = open('test.txt', 'ab')
            f.write(("".join(title.split()) + " ").encode('utf-8'))
            f.write(("".join(info.split()) + " ").encode('utf-8'))
            f.write(("".join(rating_nums.split()) + " ").encode('utf-8'))
            f.write(("".join(rating_people.split()) + " ").encode('utf-8'))
            f.write(("".join(quote.split()) + " " + '\n').encode('utf-8'))
            f.close()
            print("".join(title.split()))

    def request(self, url):
        headers = { 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8"}
        content = requests.get(url, headers=headers)
        return content

books = top250books()
books.html('https://book.douban.com/top250')

下面是爬取的部分內(nèi)容:

追風(fēng)箏的人 [美]卡勒德·胡賽尼/李繼宏/上海人民出版社/2006-5/29.00元 8.8 (260575人評價) 為你,千千萬萬遍 
小王子 [法]圣埃克蘇佩里/馬振聘/人民文學(xué)出版社/2003-8/22.00元 9.0 (215493人評價) 獻(xiàn)給長成了大人的孩子們 
圍城 錢鍾書/人民文學(xué)出版社/1991-2/19.00 8.9 (182470人評價) 對于“人艱不拆”四個字最徹底的違抗 
活著 余華/南海出版公司/1998-5/12.00元 9.1 (123542人評價) 活著本身就是人生最大的意義 
解憂雜貨店 [日]東野圭吾/李盈春/南海出版公司/2014-5/39.50元 8.6 (190788人評價) 一碗精心熬制的東野牌雞湯,拒絕很難 
白夜行 [日]東野圭吾/劉姿君/南海出版公司/2008-9/29.80元 9.1 (179501人評價) 暗夜獨行的殘破靈魂,愛與惡本就難分難舍 
挪威的森林 [日]村上春樹/林少華/上海譯文出版社/2001-2/18.80元 8.0 (180870人評價) 村上之發(fā)軔,多少人的青春啟蒙 
不能承受的生命之輕 [捷克]米蘭·昆德拉/許鈞/上海譯文出版社/2003-7/23.00元 8.5 (131418人評價) 朝向媚俗的一次偉大的進軍 
三體:“地球往事”三部曲之一 劉慈欣/重慶出版社/2008-1/23.00 8.8 (130765人評價) 你我不過都是蟲子 
嫌疑人X的獻(xiàn)身 [日]東野圭吾/劉子倩/南海出版公司/2008-9/28.00 8.9 (126724人評價) 數(shù)學(xué)好是一種極致的浪漫 
紅樓夢 [清]曹雪芹著/人民文學(xué)出版社/1996-12/59.70元 9.5 (115203人評價) 誰解其中味?

?初學(xué)爬蟲,代碼寫的很粗糙,很多地方還可以優(yōu)化,其實一直感覺拿不出手,但是誰沒有開始呢,還請大家多多指教。關(guān)于python的爬蟲網(wǎng)上的教程有很多,這里用到的技術(shù),我會給出學(xué)習(xí)鏈接,要比我講的好多了,大家可以去參考學(xué)習(xí),爬蟲教程-知乎。


?這里主要寫一下自己在寫爬蟲的過程中遇到的問題及解決辦法:

?1.網(wǎng)上的教程大多是python2.x,我用的是python3.5python2.x語法和庫上有很多不一樣:比如import urllib2變成了import urllib.request等等此類變化很多。我覺得新的版本是未來,所以選擇用新的。如果你為了學(xué)起來方便也可以用2.x的版本,如果想看看這些差別,可以看這篇文章 Python 2.7.x 和 3.x 版本的重要區(qū)別。

?2.還有一個是關(guān)于字符集的問題,這應(yīng)該是個很簡單的問題,我卻花了好久才徹底搞懂,這就是計算機基礎(chǔ)不扎實的后果啊。首先關(guān)于字符集和字符編碼,可以參考這篇文章:字符集和字符編碼。了解這些之后可以再去了解python里面的encodedecode,可以參考這篇文章:python字符串的encode和decode研究心得。

?3.是關(guān)于如何應(yīng)對網(wǎng)站的反爬蟲策略,第一次運行代碼,看見書名一行一行的在終端打印出來,高興的不行。第二次寫好代碼,準(zhǔn)備把書的信息寫入文本的時候,卻發(fā)現(xiàn)打不開網(wǎng)站了,手機端,瀏覽器都不行。提示有異常請求從我的ip發(fā)出,請登陸后使用。我才意識到ip被封了,我又去搜索了一下,才知道豆瓣對請求的頻率有限制。像識別User-Agent這種基本的反爬蟲策略,幾乎所有網(wǎng)站都有,頻率限制是一些特別的網(wǎng)站才有。當(dāng)時我真是覺得又激動又覺得很有意思,有種偷偷做壞事的感覺。過了兩天,我發(fā)現(xiàn),豆瓣又解禁了ip,我這次吸取經(jīng)驗,每請求一次,我都讓程序sleep0.5s。這樣它就發(fā)現(xiàn)不了了,不過速度是真的慢。還有一種代價比較高的方法是買很多代理ip,打一槍換一個地方。


寫在最后:

關(guān)于爬蟲要學(xué)習(xí)的還有很多,因為畢設(shè)要用到微博數(shù)據(jù),所以要爬去微博數(shù)據(jù),下個目標(biāo)就是要能模擬登陸新浪微博。寫代碼真是太有意思了!嘿嘿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 可以看我的博客 lmwen.top 或者訂閱我的公眾號 簡介有稍微接觸python的人就會知道,python中...
    ayuLiao閱讀 3,397評論 1 5
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項目接著寫寫一名3年工作經(jīng)驗的J...
    燕京博士閱讀 7,804評論 1 118
  • 1 前言 作為一名合格的數(shù)據(jù)分析師,其完整的技術(shù)知識體系必須貫穿數(shù)據(jù)獲取、數(shù)據(jù)存儲、數(shù)據(jù)提取、數(shù)據(jù)分析、數(shù)據(jù)挖掘、...
    whenif閱讀 18,313評論 45 523
  • 微風(fēng)不燥,一切都剛剛好
    樓亭小詩閱讀 112評論 0 0
  • 情如初漾|文 我特別喜歡聽歌,有時候也喜歡自己哼著唱。記得以前上學(xué)時候也教過班里的同學(xué)唱,工作之后也教過學(xué)生唱。 ...
    情如初漾閱讀 538評論 2 3

友情鏈接更多精彩內(nèi)容