python解析本地HTML文件
Python使用爬虫技术时,每运行一次,本地都会访问一次主机。为避免完成程序前调试时多次访问主机增加主机负荷,我们可以在编写程序前将网页源代码存在本地,调试时访问本地文件即可。现在我来分享一下爬取资料的调试过程。
一、将网页源代码存在本地
1、打开需要爬取的网页,鼠标右键查看源代码
2、复制源代码,将代码保存至本地项目文件目录下,文件后缀改为.html
二、在Python中打开本地html文件
打开并读取本地文件可使用BeautifulSoup方法直接打开
soup=BeautifulSoup(open('ss.html',encoding='utf-8'),features='html.parser') #features值可为lxml
解析后可以直接使用soup,与请求网页解析后的使用方法一致
三、使用本地文件爬取资料
1、先爬取主页的列表资料,其中同义内容使用“@”符号连接
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def draw_base_list(doc):lilist=soup.find('div',{'class':'babynames-term-articles'}).findAll('article');#爬取一级参数for x in lilist:str1=''count=0a='@'EnName=x.find('a').text;Mean=x.find('div',{'class':'meaning'}).text;Sou=x.find('div',{'class','related'}).findAll('a')Link=x.find('a').get('href');for x in Sou:if count!=0:#添加计数器判断是否为第一个,不是则添加@str1=str1+as=str(x) #将x转换为str类型来添加内容str1=str1+scount+=1Source=str1print(Source); print(Meaning);
运行后发现Source和Meaning中包含了标签中的内容,我们使用正则表达式re.sub()方法删除str中指定内容。查看源代码可以发现标签内容只有一个链接,可以获取标签内的链接后再指定删除。
首先在for循环内给定一个值获取标签内的链接link=x.get(‘href’),接着使用sub方法指定删除link。代码如下:
link=x.get('href')
change2=re.sub(link,'',s)
运行后我们发现str中还存在标签名,在for循环中指定多余内容删除:
link=x.get('href')
s=str(x)
change1=re.sub('<a href="','',s)
change2=re.sub(link,'',change1)
change3=re.sub('">','',change2)
change4=re.sub(' Baby Names','',change3)
change5=re.sub('</a>','',change4)
change=re.sub(' ','',change5)
最后就能得到想要的信息。
2、再爬取详细信息
通过def draw_base_list(doc)函数向二级详情函数传递Link参数爬取详细信息,为避免频繁访问主机,我们同样将详情页的源代码保存至本地并解析。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def draw_detail_list():str1=‘’meta="boy"doc=BeautifulSoup(open('nn.html',encoding='utf-8'),features='html.parser')Des=doc.find('div',{'class':'single-babyname-wrapper'}).findAll('p')Gen=doc.find('div',{'class':'entry-meta'}).find('a')#print(Gen)g=str(Gen)for i in Gen:if meta in g:Gender="boy"else:Gender="girl"#print(Gender)for x in Des:#print(x)if x.find('a')==None: #该标签下有我们不需要的信息,查看源代码找到信息之间的联系,发现不需要的信息中都有链接c=str(x)change1=re.sub('<p>','',c) #与一级信息函数一样删除指定内容change2=re.sub('</p>','',change1)change3=re.sub('\t','',change2)change=re.sub('\n','@',change3)str1=str1+change#Description=x.text#print(Description)Description=str1#print(Description)data={ #将数据存进字典中方便将数据保存至csv文件或数据库中'EnName':EnName,'CnName':'','Gender':Gender,'Meaning':Meaning,'Description':Description,'Source':Source,'Character':'', #网页中没有的信息数据列为空'Celebrity':'','WishTag':''}#print(data)
3、将爬取下来的数据存入csv文件中
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def draw_base_list(doc):......#爬取一级参数for x in lilist:......for x in Sou:............draw_detail_list(Link,EnName,Meaning,Source) #将数据传给二级信息函数def draw_detail_list(url,EnName,Meaning,Source):......for i in Gen:......for x in Des:......data={......}write_dictionary_to_csv(data,'Names') #将字典传给存放数据函数,并给定csv文件名def write_dictionary_to_csv(dict,filename):file_name='{}.csv'.format(filename)with open(file_name, 'a',encoding='utf-8') as f: file_exists = os.path.isfile(filename)w =csv.DictWriter(f, dict.keys(),delimiter=',', quotechar='"', lineterminator='\n',quoting=csv.QUOTE_ALL, skipinitialspace=True)w.writerow(dict)
打开文件后发现没有文件头,为避免重复写入文件头,判断文件是否为空,若为空则写入文件头:
#防止每次循环重复写入列头
if os.path.getsize(file_name)==0 : #通过文件大小判断文件是否为空,为0说明是空文件w.writeheader()
再次运行后文件头正常写入文件中。
4、访问主机,完成信息爬取
确定代码正确没有错误后就可以将打开本地文件的代码改成访问网页,最后完成数据的爬取。
python解析本地HTML文件相关推荐
- python读取本地文件-python解析本地HTML文件
Python使用爬虫技术时,每运行一次,本地都会访问一次主机.为避免完成程序前调试时多次访问主机增加主机负荷,我们可以在编写程序前将网页源代码存在本地,调试时访问本地文件即可.现在我来分享一下爬取资料 ...
- xml的学习和使用python解析读取xml文件
1. XML的介绍 XML 指可扩展标记语言(EXtensible Markup Language). 和json类似也是用于存储和传输数据,还可以用作配置文件. 类似于HTML超文本标记语言,但是H ...
- c 本地html解析,使用selenium解析本地HTML文件方法
import requests import time """ 经验总结: 1.使用selenium解析本地HTML文件方法, browser.get("fil ...
- lxml读取本地html文件,如何使用Python和lxml来解析本地html文件?
我在python中使用本地html文件,我正在尝试使用lxml来解析文件.由于某种原因,我无法正确加载文件,我不确定这是否与我的本地计算机上没有设置http服务器,etree用法或其他内容有关. 这是 ...
- python解析jmeter.jtl文件_jtl文件解析(jmeter+jenkins+python实现接口自动化)
网上搜索出jmeter压测结果解析成html文件的博客分享很多,但是并不能达到我自己的测试预期,因此采用Python解析jtl文件,解析结果直接展示用例通过和失败的数目,以及失败的用例标题,如下图所示 ...
- 用Python解析AndroidManifest.xml文件找MainActivity
写在前面的话 这个是一篇水博客,因为我知道只要是个大二的小朋友就可以搞定,我大二就一天在搞这些事情,今天纯属吃饱了撑着,想敲键盘,等实验结果然后随便写写.我知道大家都会的,不会的小朋友随便看看然后自己 ...
- 使用Python解析nginx日志文件
项目的一个需求是解析nginx的日志文件. 简单的整理如下: 日志规则描述 首先要明确自己的Nginx的日志格式,这里采用默认Nginx日志格式: log_format main '$remote_a ...
- python解析jmeter.jtl文件_jmeter之jtl文件解析(生成测试报告)
我们知道命令行的方式执行完成jmeter后,会生成jtl文件,里面打开后就是一行行的测试结果, t表示从请求开始到响应结束的时间 lt表示整个的空闲时间 ts表示访问的时刻 s表示返回的结果true表 ...
- python使用xlrd读取xlsx文件_005:【Python读取本地Excel文件】使用xlrd模块来读取本地Excel文件...
使用xlrd模块来读取xls文件 注意:xlrd只能对Excel文件进行"读"操作 1.首先本地新建一个Excel表格(.xls格式),假设表格内容如下: 2.引入xlrd模块(没 ...
- java解析excel文件_1.3.1 python解析excel格式文件
Excel表格 Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件. excel文档的基本定义 工作薄(work ...
最新文章
- SQLserver安全设置攻略
- python根据文件名或后缀名遍历文件夹下所有文件或图片的路径,并计算文件行数
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- 关于谷歌自动换行的奇异效果
- jvm一个线程的成本
- Qt Creator使用自定义着色器
- Vue学习笔记一 创建vue项目
- java基础语法3 方法
- (第十三周)评论Final发布II
- #6282. 数列分块入门 6
- Docker学习之守护进程
- 栈应用—括号匹配问题
- java代码性能优化
- oracle序列可以创建同义词吗,Oracle基础教程:同义词与序列
- 【CCF CSP】201903-1小中大
- IP地址、网关地址、子网掩码地址
- 不是所有数学命题都是可以被证明或证伪
- Navicat premium 导入Excel文件失败
- 计算机省一级b类模拟试题,江苏省计算机一级模拟试题及答案
- 运算放大器的性能指标