pyinstaller库的使用
pyinstaller是一个将Python语言脚本(.py)打包成可执行文件的第三方库,可用于windows,Linux,Max OS X等操作系统。
使用pip工具安装
pip install pyinstaller
打包:
pyinstaller F:\python\codes\da.py
beautifulsoup4库的使用
beautifulsoup4库是一个解析和处理HTML和XML的第三方库。
它最大的优点是根据HTML和XML语法建立解析树,进而高效解析其中的内容。
HTML建立的web页面是一个非常复杂,除了有用的信息外,还包括大量用于页面格式的元素,直接解析一个Web页面需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。
引用beautifulsoup4库
from bs4 import BeautifulSoup
beautifulsoup4库解析
beautifulsoup4库中最主要的是Beautifulsoup4类,每个实例化的对象相当于一个页面。采用from-import导入库中的Beautifulsoup类后,使用Beautifulsoup()创建一个BeautifulSoup对象。
-
BeautifulSoup对象的常用属性(共6个)
-
标签对象的常用属性(共4个)
由于HTML语法可以在标签中嵌套其他标签,所以,string属性的返回值遵循如下原则
- 如果标签内没有其他标签,string属性返回其中的内容。
- 如果标签内部还有其他的标签,但只有一个标签,string属性返回最里面的标签的内容。
- 如果标签内部有超过一层嵌套的标签,string属性返回None(空字符串)
当需要列出标签对于的所有内容或找到非第一个标签时,需要用到BeautifulSoup
的find()和find_all()方法,这两个方法会遍历整个HTML文档,按照条件返回标签内容。
BeautifulSoup.find_all(name,attrs,recursive,string,limit)
根据参数找到对应的标签,返回列表类型。
中国大学排名爬虫
网页链接地址
软科中国最好大学排名2016
大学排名爬虫需要3个步骤
- 从网络上获取网页内容
- 分析网页内容并提取有用数据到恰当的数据结构中
-
利用数据结构展示或进一步处理数据
网页源代码:
代码中每个td标签包含大学排名表格的一个列数值,与表头一一对应。因此。如果要获得其中的数据,需要首先找到<tr></tr>标签,并遍历其中每个<td></td>标签,获取其值写入程序的数据结构中。
import requests
from bs4 import BeautifulSoup
allUniv=[]
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)#用get方法打开连接,设定每次请求超时时间为30秒
r.raise_for_status() #如果状态不是200,引发异常
r.encoding='utf-8' #设定编码为utf-8
return r.text
except:
return ""
def fillUnivList(soup):
data=soup.find_all("tr")#获取所有的tr
for tr in data:
ltd=tr.find_all("td")#获取tr中的所有的td
if len(ltd)==0:
continue
singleuniv=[]
for td in ltd:
singleuniv.append(td.string) #提取td标签中的内容
allUniv.append(singleuniv)
def printUnivList(num):
print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","学校名称","省市","总分","培养规模"))
for i in range(num):
u=allUniv[i]
print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(u[0],u[1],u[2],u[3],u[6]))
def main(num):
url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
html=getHTMLText(url)
soup=BeautifulSoup(html,"html.parser")
fillUnivList(soup)
printUnivList(num)
main(10)
结果
格式太乱,解决方法:
替换填充字符,采用“中文全角空格”代替默认使用的“西文半角空格”,这能够对齐中文字符出现的列。
def printUnivList(num):
print("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}{5:{0}^10}".format(chr(12288),"排名","学校名称","省市","总分","培养规模"))
for i in range(num):
u=allUniv[i]
print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8}{5:{0}^10}".format(chr(12288),u[0],u[1],u[2],u[3],u[6]))
搜索关键字自动提交
import requests
from bs4 import BeautifulSoup
import re
import json
def getKeywordResult(keyword):
url="http://www.baidu.com/s?wd="+keyword
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding='utf-8'
return r.text
except:
return ""
def parsetLinks(html):
soup=BeautifulSoup(html,"html.parser")
links=[]
for div in soup.find_all('div',{'data-tools':re.compile('title')}):
data=div.attrs['data-tools']
d=json.loads(data)
links.append(d['title'])
return links
def main():
html=getKeywordResult("Python语言程序设计语言")
ls=parsetLinks(html)
count=1
for i in ls:
print("[{:^3}]{}".format(count,i))
count+=1
main()
结果
网友评论