用正則獲取百度貼吧當日新貼

2022-03-25 07:19:27 字數 2936 閱讀 8552

wget -- linux 下獲取 http頁面的工具 -o - 表示輸出到管道(而不是檔案)

grep --linux 正規表示式工具

-p  使用 prel語法

-o  只輸出匹配到的內容(而不是一行)

(/p/[0-9]) 首頁貼子的鏈結,格式為 a href="/p/3444444444"
.*? 非貪婪匹配任意字元

j_user_card.*?\>(.*?) 查詢發貼人暱稱,值為(.*?)

threadlist_reply_date j_reply_data.*?>[ ]*([0-9]:[0-9])  最後回覆日期,值為([0-9]:[0-9])

首頁中不能獲取到最新回覆貼的url。為了獲取最新的帖子(無論是主題還是回覆),需要以到 查詢。查詢條件是吧名和使用者名稱。在找到的結果中,如果發貼時間匹配,那麼就可以認為是剛才在首頁查到的新貼,從而採集url.

wget http://

tieba.baidu.com/f?kw=山西 -o - | grep -po 'j_user_card.*?\>.*?\<' - | sed -r s/'j_user_card[^>]*>([^<]*)<'/'http:\/\/tieba\.baidu\.com\/f\/search\/ures\?ie=utf-8\&kw=山西\&un=\1'/g

j_user_card 是使用者名稱所在的標籤標識。用grep找到後,用sed提取並連線成url。結果如下:
ie=utf-8&kw=山西&un

=佛光普照五台山

ie=utf-8

&kw=山西&un

=不見風雨見彩虹

ie=utf-8

&kw=山西&un

=★冰月寒心★

ie=utf-8

&kw=山西&un

=小偉苦笑

ie=utf-8

&kw=山西&un

=小偉苦笑

ie=utf-8

&kw=山西&un

=領域神王

ie=utf-8

&kw=山西&un

tieba.baidu.com/f?kw=山西 -o - | grep -po 'j_user_card.*?\>.*?\<' - | sed -r s/'j_user_card.*?>([^<]*)<'/'\/f\/search\/ures\?ie=utf-8\&kw=山西\&un=\1'/g | wget --base=

-i - -o - | grep -po '' >urlcheck.txt

grep -po '

'

在高階查詢中查詢到的記錄,我們只取當天的。

[root@iz62jhlmsz ~]$grep

"$(date --rfc-3339='date')

"

所以,提取乙個使用者當天發貼的語句是:

tieba.baidu.com/f?kw=山西 -o - | grep -po 'j_user_card.*?\>.*?\<' - | sed -r s/'j_user_card.*?>([^<]*)<'/'\/f\/search\/ures\?ie=utf-8\&kw=山西\&un=\1'/g | wget --base=

-i - -o - | grep -po ".*?$(date --rfc-3339='date').*?<\/font>" |  sed s/'^.*\(.*\)<\/a>.*\(.*\)<\/div>.*\(.*\)<\/font>.*.*\([-0-9: ]\\)<\/font>.*$'/'\1\t\2\t\3\t\4\t\5'/g

實際sed操作會出錯,試著轉成utf-8編碼就正常了。

iconv --from-code=latin1 --to-code=utf-8

原因解釋:

"sed的執行會和locale相關。比如說如果檔案的編碼是gbk的,而locale是utf-8,這時候你所有關於正規表示式的知識都是不起作用的。根據我的經驗用sed處理有中文字元處理的檔案,最好把locale設定成lc_all=c,進行處理,或者你能保證檔案的編碼和locale是一致的情況下。" 

export lc_all=c

推薦使用 lc_all=c 因為轉成utf-8會嚴重影響正則匹配的效率。

sed 的另乙個問題是它不支援非貪婪匹配。所以在書寫的時候費了很大周折。

另外還得刪除重複的記錄。

python百度貼吧發帖簽到 百度貼吧簽到指令碼

本指令碼為我從網上各渠道蒐集到的簽到指令碼的雜交 如果不需要日誌則把帶 日誌記錄 的行刪除即可 from requests import session from time import time 日誌記錄 start time time 資料 log path f e data sign log ...

百度貼吧爬蟲

encoding utf 8 import urllib.request import urllib.parse import time import random def load page url 通過url來獲取網頁內容jfa param url 待獲取的頁面 return url對應的網頁內...

爬蟲 1 5獲取百度貼吧內容

import requests import time from bs4 import beautifulsoup 首先我們寫好抓取網頁的函式 url def get html url try r requests.get url,timeout 30 r.raise for status r.en...