第2個爬蟲教程的大坑,關於正規表示式的括號與豎線

2021-07-29 08:42:48 字數 1333 閱讀 8071

應該說是乙個不錯的教程,也是我的第乙個爬蟲入門教程,但是有一處值得注意:

********************===割***********************************=

我們可以看到我們想要的熱搜的內容都是如下結構:

電影名稱

所以我們就可以按照如上內容寫正規表示式,然後在html源**中匹配出來電影名稱就可以了

我們正規表示式可以這樣寫

********************===割***********************************=

注意,外面的**與截圖中的是不一樣的,截圖中的是正確的版本,用於提取的內容,要加括號,常用的是(.*?)

此外,在個人除錯中,也發現了豎線需要加轉義字元反斜槓。

可以參見:

********************===割***********************************=

我們可以看到,每乙個段子都是…

包裹的內容。

現在我們想獲取發布人,發布日期,段子內容,以及點讚的個數。不過另外注意的是,段子有些是帶的,如果我們想在控制台顯示是不現實的,所以我們直接把帶有的段子給它剔除掉,只儲存僅含文字的段子。

所以我們加入如下正規表示式來匹配一下,用到的方法是 re.findall 是找尋所有匹配的內容。方法的用法詳情可以看前面說的正規表示式的介紹。

好,我們的正規表示式匹配語句書寫如下,在原來的基礎上追加如下**

content = response.read().decode('utf-8')

pattern = re.compile('.*?(.*?).*?(.*?).*?

(.*?)(.*?)',re.s)

items = re.findall(pattern,content)

for item in items:

print item[0],item[1],item[2],item[3],item[4]

1).*? 是乙個固定的搭配,.和*代表可以匹配任意無限多個字元,加上?表示使用非貪婪模式進行匹配,也就是我們會盡可能短地做匹配,以後我們還會大量用到 .*? 的搭配。

2)(.*?)代表乙個分組,在這個正規表示式中我們匹配了五個分組,在後面的遍歷item中,item[0]就代表第乙個(.*?)所指代的內容,item[1]就代表第二個(.*?)所指代的內容,以此類推。

3)re.s 標誌代表在匹配時為點任意匹配模式,點 . 也可以代表換行符。

這樣我們就獲取了發布人,發布時間,發布內容,附加以及點讚數。

第乙個爬蟲教程的大坑,關於for迴圈列印字串列表

以下來自於 的乙個爬蟲教程 coding utf 8 import re import requests as r request r.get request.encoding gbk result request.text print result raw input pattern title ...

求單向鍊錶中的倒數第K個節點2

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如乙個鍊錶有6個節點,從頭節點開始他們的值依次是1 2 3 4 5 6.這個鍊錶的倒數第3個節點值為4.解題思路 主要思路是借助兩個迭代器指向的位置,確定倒數第k個節點。第...

打表法經典2題 小於n的質數和第k個醜數

1 求小於n的所有質數 1 開乙個大小為n的bool陣列a,下標代表整數,值true代表被mark過,有因子,非素數 2 i 從 2開始到n 1,如果a i 沒被mark,a i 就是質數,然後mark有a i 因子的數 2 a i 3 a i 4 a i 且 n 這裡注意,係數實際不需要從2開始,...