豆瓣讀書爬蟲(requests re)

2022-04-08 01:38:16 字數 3476 閱讀 2016

前面整理了一些爬蟲的內容,今天寫乙個小小的栗子,內容不深,大佬請忽略。內容包括對豆瓣讀書**中的書籍的基本資訊進行爬取,並整理,便於我們快速了解每本書的中心。

每當爬取某個網頁的資訊時,首先就是要進入到網頁中,看看有沒有什麼爬取過程中的限制,可以檢視**的robots協議。就是在原**的後面加上"/robots.txt"。本**中得到的結果是:

user-agent: *

disallow: /subject_search

disallow: /search

disallow: /new_subject

disallow: /service/iframe

disallow: /j/

sitemap:

sitemap:

user-agent: wandoujia spider

disallow: /

根據上面的協議可以看到,並沒有禁止一些普通的爬蟲,就像我們現在這樣,僅僅爬取一點點的東西來供自己使用。那麼,我們就可以使用之前文章中提到的結構來實現這個爬蟲,首先匯入函式庫,然後套用框架,傳入位址,返回頁面內容。這點內容在這篇部落格中寫到了,這裡就不詳細解釋了。到此,網頁的爬取就結束了,接下來就剩下從這些東西中拿到我們想要的內容。

1

import

requests

23 url = "

"4defgethtmltext(url):

5 headers =

8try

:9 response = requests.get(url, headers=headers)

10response.raise_for_status()

12return

response.text

13except:14

print("

fail")

15return

1617 html = gethtmltext(url)

上面提取的的網頁**包括很多東西,像展示出來的頁面的各種框架等等,這些對我們來說都是沒有用的,而且通過正則來提取資訊,如果在整個頁面中直接提取的話,不免會出現一些巧合,使得沒有提取到真正想要的內容,而且pattern一樣的其他內容,所以,首先,把要把關鍵的塊先拿出來,再一點一點的取出具體資訊。

1

importre2

3 re_books = re.compile('

', re.s) #

re.s也在正規表示式的部落格中寫到了,是為了讓「.」可以匹配換行符

4 content = re_books.search(html)

通過檢查網頁源**,找到可以取出主要資訊的匹配規則,將中間的內容全部獲得。剩下的就是通過正則來提取每本書的每項資訊。這個在於自己觀察他們的規律,尋找匹配的規則。資訊的標籤不止乙個,最後選擇了使用pandas來整理資料,pandas的dataframe資料型別可以很方便的儲存二維結構,而且pandas有將資料之間儲存成excel格式的方法(dataframe.to_excel())。

1

import pandas as pd #

這是大部分人的習慣,pandas比較長,而且在資料處理中經常使用,所以用pd兩個字母來代表23

#首先,先建立乙個dataframe,之後遍歷每本書籍的資訊,存成dataframe格式拼接在他的後面就可以了

4 data = pd.dataframe(columns=['

title

', '

author

', '

abstract

', '

href

', '

publisher'])

56 re_book = re.compile('

(.*?)

', re.s)

7 booklist = re_book.findall(content[0]) #

findall找到所有的書籍資訊,返回為列**式

8for book in

booklist:

9 count =0

10 count += 1

11 href = re.search('

href="(.*?)"

', book) #

.*? 是指以非貪婪的模式匹配,()是分組,通過group方便取出其中的資訊

12 href = href.group(1)

13 title = re.search('

(.*?)

', book, re.s)

14 title = title.group(1).split()[0]

15 author = re.search('

(.*?)

', book, re.s)

16 author = '

'.join(author.group(1).split())

17 publisher = re.search('

(.*?)

', book, re.s)

18 publisher = '

'.join(publisher.group(1).split())

19 abstract = re.search('

(.*?)

', book, re.s)

20 abstract = '

'.join(abstract.group(1).split())

21 abstract = re.sub('

【內容簡介】

', '', abstract) #

慢慢除錯中發現,取得的資訊不太好看,其中在第一本數的主要內容開頭有這麼幾個字,就用re的sub方法替換掉了

22 new = pd.dataframe(, index=["0"

])24 data.to_excel('

bookinfo.xls

', encoding='

utf-8

')

我們可以看一下得到的結果,pandas直接輸出的結果也很規整,這裡儲存到了excel中,起初存到csv檔案中,但是亂碼了,後面沒多想就換成了excel,稍後我再去看看怎麼回事,或者有讀者清楚地,可以教教博主。

圖中有些東西沒有展示出來,但是大家都懂對吧。可以自己試一試。當然這個爬蟲很淺,僅得到這點的資料,後面的內容就交給你們了,可以試著往深里點一點,原理都是大同小異的,學習爬蟲在平時就要隨時發現可以挖掘的東西,慢慢嘗試。

python 爬蟲 豆瓣讀書使用者評分爬蟲

首先我們先建立接下來需要用的的東西 import requests 匯入requests模組用於請求網頁 from lxml import etree 從lxml模組中匯入etree模組用於解析網頁 class userspinfen 定義乙個douban類,用於承載後面的 def init sel...

豆瓣讀書 豆瓣電影

1.獲取豆瓣讀書頁資訊,為 如下 coding utf 8 import requests from lxml import etree 1.獲取豆瓣讀書網頁內容 headers url response requests.get url,headers headers text response....

Python 爬蟲 抓取豆瓣讀書TOP250

coding utf 8 author yukun import requests from bs4 import beautifulsoup 發出請求獲得html原始碼的函式 def get html url 偽裝成瀏覽器訪問 resp requests.get url,headers heade...