近期要作一個項目,重複性勞動比較多,小夥伴建議我用Jsoup,可是因爲項目緊急,我直接選擇了BeautifulSoup,關鍵緣由是我Java語言不如Python掌握的熟練啊!因此,查了一圈它的中文文檔,發現還能夠,上手入門不難。這是BeautifulSoup的中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 。簡單介紹下項目背景:有上百個PC頁面須要檢查文字是否含有某個關鍵詞語,這個詞語咱們叫它「計算機」吧,排查「計算機」和「jisuanji」拼音不分大小寫。以前和同事作過seo相關的項目,要檢查html文檔中head中的meta標籤。她當時用的jsoup,我就想到我是否也能,因此也專門請教了之前作爬蟲的朋友,他們直接給我推薦的這個模塊BeautifulSoup。html
實現思路:python
1、讀取文檔正則表達式
這部分是urls在excel文檔中第5列,這個文件是本身寫的配置文件,因此用列索引讀取就行,這部分做爲公用方法拿出來用。 app
#coding=utf-8 import pandas as pd def ge_url(): data = pd.read_excel("urls.xlsx",sheet_name="Sheet1",usecols=[4],names=None) data.values.tolist() list_url=[] for i in data.values.tolist(): list_url.append(i[0]) return list_url
2、解析文檔:head和body分別解析 函數
#coding=utf-8 from bs4 import BeautifulSoup import requests import re import get_url urls=[] urls = get_url.ge_url() print(urls) for url in urls: re_content = requests.get(url).content # 構造函數能夠指定解析器 soup = BeautifulSoup(re_content,'html.parser') #先判斷head docu_head = soup.head list_head=[] print("++++++++++++++++++++++++++++++++++++") #聲明jisuanji或者計算機字符串匹配正則表達式的對象,不區分大小寫 parttern = re.compile(r'jisuanji|計算機',flags=re.I) #尋找全部head的子節點 for item in soup.head.contents: list_head.extend(parttern.findall(str(item))) if list_head !=[]: print("HEAD+THIS URL IS ILLEGAL!"+url+str(list_head)) print("===============================================") #後判斷body list_body=[] #查找body的全部子孫節點 docu_body = soup.body.descendants for child in docu_body: list_body.extend(parttern.findall(str(child))) if list_body!=[]: print("BODY+THIS URL IS ILLEGAL!"+url+str(list_body))
3、正則表達式匹配測試
代碼在上面貼了url
就是這樣,最後檢測除了不少資源文件的引用的靜態資源有關鍵詞。這樣大大的節省了本身的測試時間。excel