使用bs4 re正則來爬取網頁上需要的資料

2021-10-20 18:53:26 字數 2255 閱讀 1086

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import re

from bs4 import beautifulsoup as bs

import requests

headers =

lists =

# 傳送網路請求的方法,傳入url和訊息頭

defget_text

(url, headers)

: r = requests.get(url=url, headers=headers)

r.encoding =

'gbk'

soup = bs(r.text,

'html.parser'

)# 尋找標籤為a的內容,匹配href內容裡有.html的行

y = soup.find_all(

'a', href=re.

compile

(r'.html'))

for i in y:

# 如果行裡有height的文字

if'height'

instr

(i):

# 用正則掐頭去尾取出中間的文字

t = re.findall(

'str(i)

)for tt in t:

# 新增到之前建立的列表中

# 方法執行完成後,返回列表

return

(lists)

if __name__ ==

'__main__'

:# 取多個頁的資訊,調整一下url,一共為三頁

for m in

range(1

,4):

if m ==1:

url =

''+'.html'

else

: url =

'_'+str

(m)+

'.html'

# 傳入url,訊息頭,呼叫網路請求的方法

u = get_text(url, headers)

# 列印列表資訊,展現

for u in lists:

print

(u)

from bs4 import beautifulsoup

soup = beautifulsoup (html_doc,

'html.parser'

, from_encoding =

'utf8'

)# 第乙個引數:html文件的字串

# 第二個引數:指定將要解析html網頁的解析器

# 第三個引數:指定html文件的編碼(如果html網頁的編碼與**的編碼不一致的話,解析過程中就會出現亂碼)

# 2 搜尋節點

# 2.0 方法:find_all(name, attrs, string)

# 2.1 查詢所有標籤為a的節點

soup.find_all(

'a')

# 2.2 查詢所有標籤為a、鏈結符合/view/123.htm形式的節點

# 正規表示式

# 2.3 查詢所有標籤為div、class為abc、文字內容為『python』的節點

soup.find_all(

'div'

, class_=

'abc'

, string=

'python'

)# 3 訪問節點資訊

# 3.0 假設得到節點python

# 3.1 獲取節點的標籤名稱

node.name

# 3.2 獲取節點的所有屬性(返回乙個字典)

node[

'href'

]# 3.3 獲取節點的文字內容

bs4爬取網頁基礎

import requests from bs4 import beautifulsoup def getsoup url try r requests.get url,timeout 30 r.raise for status print r.text 很亂 soup beautifulsoup ...

Python使用bs4爬取資料時亂碼問題

使用requests和beautifulsoup模組爬取網頁資料時,有時會出現亂碼情況,如下所示 需要爬去的網頁的編碼格式為 pyhton 如下所示 import requests from bs4 import beautifulsoup def get content url content d...

python2使用bs4爬取騰訊社招

要求 使用bs4進行解析,並把結果以json檔案形式儲存 注意 如果直接把python列表沒有序列化為json陣列,寫入到json檔案,會產生中文寫不進去到檔案,所以要序列化並進行utf 8編碼後寫入檔案。coding utf 8 import requests from bs4 import be...