python解析本地HTML文件
Python使用爬虫技术时,每运行一次,本地都会访问一次主机。为避免完成程序前调试时多次访问主机增加主机负荷,我们可以在编写程序前将网页源代码存在本地,调试时访问本地文件即可。现在我来分享一下爬取资料的调试过程。
一、将网页源代码存在本地
1、打开需要爬取的网页,鼠标右键查看源代码

2、复制源代码,将代码保存至本地项目文件目录下,文件后缀改为.html

二、在Python中打开本地html文件
打开并读取本地文件可使用BeautifulSoup方法直接打开
soup=BeautifulSoup(open('ss.html',encoding='utf-8'),features='html.parser') #features值可为lxml
解析后可以直接使用soup,与请求网页解析后的使用方法一致
三、使用本地文件爬取资料
1、先爬取主页的列表资料,其中同义内容使用“@”符号连接
def draw_base_list(doc):
lilist=soup.find('div',{'class':'babynames-term-articles'}).findAll('article');
#爬取一级参数
for x in lilist:
str1=''
count=0
a='@'
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+a
s=str(x) #将x转换为str类型来添加内容
str1=str1+s
count+=1
Source=str1
print(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参数爬取详细信息,为避免频繁访问主机,我们同样将详情页的源代码保存至本地并解析。
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文件中
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文件的更多相关文章
- Python3+Requests-HTML+Requests-File解析本地html文件
一.说明 解析html文件我喜欢用xpath不喜欢用BeautifulSoup,Requests的作者出了Requests-HTML后一般都用Requests-HTML. 但是Requests-HTM ...
- 开发一个简单的chrome插件-解析本地markdown文件
准备软件环境 1. 软件环境 首先,需要使用到的软件和工具环境如下: 一个最新的chrome浏览器 编辑器vscode 2. 使用的js库 代码高亮库:prismjs https://prismjs. ...
- python基础——python解析yaml类型文件
一.yaml介绍 yaml全称Yet Another Markup Language(另一种标记语言).采用yaml作为配置文件,文件看起来直观.简洁.方便理解.yaml文件可以解析字典.列表和一些基 ...
- Python 读取本地*.txt文件 替换 内容 并保存
# r 以只读的方式打开文件,文件的描述符放在文件的开头# w 打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件 #路径path = r"D:\pytho ...
- js 解析本地Excel文件!
通常,一般读取Excel都是由后台来处理,不过如果需求要前台来处理,也是可以的.. 1.需要用到js-xlsx,下载地址:js-xlsx 2.demo: <!DOCTYPE html>&l ...
- 如何解析本地和线上XML文件获取相应的内容
一.使用Dom解析本地XML 1.本地XML文件为:test.xml <?xml version="1.0" encoding="UTF-8"?> ...
- 用Python删除本地目录下某一时间点之前创建的所有文件
因为工作原因,需要定期清理某个文件夹下面创建时间超过1年的所有文件,所以今天集中学习了一下Python对于本地文件及文件夹的操作.网上 这篇文章 简明扼要地整理出最常见的os方法,抄袭如下: os.l ...
- python打开一个本地目录文件路径
os.path.abspath()os 模块为 python 语言标准库中的 os 模块包含普遍的操作系统功能.主要用于操作本地目录文件.path.abspath()方法用于获取当前路径下的文件. 比 ...
- Python解析HDF文件 分类: Python 2015-06-25 00:16 743人阅读 评论(0) 收藏
前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...
随机推荐
- 结构化异常SEH处理机制详细介绍(二)
本文将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.SEH实际包含两个主要功能:结束处理(termin ...
- Java为什么会流行
为什么Java语言能长期占据编程语言排行榜首位? 面向对象设计,使用简单,可以很快速的入门: 开源生态做得好,很多可重用的组件,拿来即用: 跨平台,高性能,是做后台开发的首选 另一方面,Java命好, ...
- 布鲁克斯法则 (Brooks's Law)
软件开发后期,添加人力只会使项目开发得更慢. 这个定律表明,在许多情况下,试图通过增加人力来加速延期项目的交付,将会使项目交付得更晚.布鲁克斯也明白,这是一种过度简化.但一般的推理是,新资源的增加时间 ...
- 洛谷P1783海滩防御
题目 跟奶酪那道题差不多,用并查集来求解. 用二分,或可以用类似于克鲁斯卡尔算法的贪心来每次判断是否起点和终点已经并在一个集合里(类似奶酪) 如果已经覆盖就结束判断并得出答案:即当前选择的边的最大值. ...
- [golang][vue] 前后端分离、微服务架构等等---通用后台权限管理系统001
emmm暂未开源,先上图.其实有很多东东都未完成,一步一步来吧 这里是大图 这里会有二维码的,暂未写完哈 注册界面 后台 测试地址 测试地址al.landv.pw:88 测试账号:admin 测试密码 ...
- 64位内核开发第六讲,Windbg调试ring3跟Ring0.一起调试
目录 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 有时候我们调试一个程序.可以使 ...
- SpringCloud:搭建微服务项目框架 microservicecloud
1.搭建整体父工程 microservicecloud 新建父工程microservicecloud,切记是Packageing是pom模式 主要是定义POM文件,将后续各个子模块公用的jar包等统一 ...
- Java GUI小程序--画板
画板效果 (以前写在Csdn上的博文,没去水印,Csdn名字同博客园) 布局类: package gary; import java.awt.Color; import java.awt.even ...
- Kafka(二) —— Server端设计原理
整理架构 kafka confluence kafka官方文档中文翻译-设计 消息设计 /** * 消息类 * * @author Michael Fang * @since 2019-11-14 * ...
- JavaWeb之Tomcat(2) —— Tomcat的使用
1. 启动和关闭Tomcat (1) 打开Tomcat的安装目录,在 bin 目录下,有四个文件: startup.bat 和 startup.sh,他们分别是Windows环境下的批处理文件和Lin ...