近期要作一个项目,重复性劳动比较多,小伙伴建议我用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