爬取百度貼吧資料

2021-08-14 12:21:29 字數 2705 閱讀 2304

每次寫的時候總是正規表示式出現問題,還需多多練習正規表示式的書寫,需要耐心、細心

# coding: utf-8

# 引入請求包

import requests

# 引入正規表示式包

import re

# 1.準備url

url = ''

# 2.獲取網頁源**,發起請求接收響應

response = requests.get(url)

html = response.content

# 3.獲取網頁標題

# 3.1 準備網頁標題的正規表示式

title_pat = re.compile(r'(.*?)')

# 3.2 使用search()函式搜尋符合正則的字串

rs = re.search(title_pat, html)

# 3.3 根據當前帖子的標題,拼接檔名稱

file_name = rs.group(1)+'.txt'

file_handle = open(file_name.decode('utf-8'),

'w')

# 4.獲取總頁數

# 4.1 準備總頁數的正規表示式

pages_pat = re.compile(r'共(.*?)')

# 4.2 使用search()函式搜尋符合正則的字串

rs = re.search(pages_pat, html)

# 4.3 取出總頁數字元,轉換為整數型別

total_page = int(rs.group(1))

print

'該帖子共有%s頁!'%total_page

# for迴圈遍歷總頁碼次

for x in

range(1

, total_page+1):

print

'正在爬取第%s頁,請稍後.....'%x

# 5.根據x的值,拼接完整的url位址

url = '?pn=%s'%x

# 6.發起請求,獲取該頁的html源**

response = requests.get(url)

html = response.content

# print html

# 7.準備提取資料的正則,使用re.s 可以匹配到任何字元

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

.*?d_badge_lv">(.*?)

.*?(.*?).*?(.*?).*?(.*?)(.*?)'

, re.s)

# 8.使用findall()查詢所有符合正則的字元

rs = re.findall(pattern, html)

# for 迴圈所有資料

for detail in rs:

# print detail

# 1.取出使用者名稱

name = detail[0]

# 1.1 對使用者名稱資訊進行處理

replace_img = re.compile(r'')

# 1.2 替換為-

name = re.sub(replace_img,

'-', name)

# 2.取出頭銜

rank = detail[1]

# 3.取出等級

level = detail[2]

# 4.樓層內容

content = detail[3]

# 4.1 替換

標籤為\n

content = content.replace('',

'\n') # 4.2 剔除所有的標籤

strip_ele = re.compile(r'<.*?>')

content = re.sub(strip_ele,

'', content)

# 4.3 去除空格

content = content.strip()

# print content

# 5.取出客戶端

from_device = '來自' + detail[4]

# 如果沒有客戶端,就設定為來自電腦端

if 'img'

in detail[4]:

from_device = '來自pc電腦端'

# 6.取出樓層

floor_num = detail[5]

if 'a'

in floor_num:

floor_num = '未知'

# 7.取出時間

datetime = detail[6]

if 'a'

in detail[6]:

datetime = '未知'

file_handle.write('***************%s******************

\n'%floor_num)

file_handle.write('使用者名稱:%s 頭銜:%s 等級%s

\n'%(name, rank, level))

file_handle.write(content)

file_handle.write('

\n')

file_handle.write('%s 日期:%s

\n\n

'%(from_device, datetime))

file_handle.close()

爬取百度貼吧

import urllib.request import urllib.parse import os,time 輸入貼吧名字 baname input 請輸入貼吧的名字 start page int input 請輸入起始頁 end page int input 請輸入結束頁 不完整的url ur...

爬取百度貼吧

帶入需要使用的包 from urllib import request,parse importos 基礎知識 變數賦值 字串賦值 爬取的關鍵字 kw lol 數值賦值 爬取的頁數範圍 start 1end 4 輸出 print kw,start,end 宣告需要爬取的連線 base url 建立資...

批量爬取百度貼吧

帶入需要使用的包 from urllib import request,parse import os 基礎知識 變數賦值 字串賦值 爬取的關鍵字 kw lol 數值賦值 爬取的頁數範圍 start 1 end 4 輸出 print kw,start,end 宣告需要爬取的連線 base url 建...