我的第二十七篇博客---beautifulsoup与csv操作方法

Posted sll-csdn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第二十七篇博客---beautifulsoup与csv操作方法相关的知识,希望对你有一定的参考价值。

Beautiful Soup和lxml一样,也是一个html/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据
lxml只会局部遍历,而Beautiful Soup是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml/
Beautiful Soup 用来解析HTML比较简单,API非常人性化,支持CSS选择器,Python标准库中的HTML解析器,也支持lxml的解析器

bs4的基本使用实:
首先必须要导入bs4库
from bs4 import BeautifulSoup
html=网页响应内容
#创建BeautifulSoup对象,第一个参数:要解析的内容,第二个参数:解析器
soup=BeautifulSoup(html,‘lxml‘)
#name:要查找的标签名称,attrs是td里的属性 爬取data-title为IP的td里的值
listId=soup.find_all(name=‘td‘,attrs={‘data-title‘:‘IP‘})
for x in listId:
print(x.get_text()) #获取标签里面的内容
print(x.get(‘class‘)) #获取标签里面的class属性

代理:
import request
from lxml import BeautifulSoup
proxies={‘http‘:‘163.125.28.243:8118‘}
response=requests.get(url=‘https://www.baidu.com‘,proxies=proxies}
print(response.text)

def getIp():
response=requests.get(url=‘https://www.kuaidaili.com/free/‘)
soup=BeautifulSoup(response.text,‘lxml‘)
listIP=soup.find_all(name=‘td‘,attrs={‘data-title‘:‘IP‘})
listPort=soup.find_all(name=‘td‘,attrs={‘data-title‘:‘PORT‘})
listTag=soup.select(‘div.post>h2>a‘) #找在class=post的div里的h2里的a标签元素 id的话是div#post
list=[]
for x in range(len(listPort)):
list.append(‘%s:%s‘%(listIp[x].get_text(),listPort[x].get_text()))
return list

 

#读csv
import csv
with open(‘1.csv‘,mode=‘r‘) as f:
reader=csv.reader(f)
for i in reader:
print(i)

#写csv
with open(‘1.csv‘,mode=‘a‘,newline=‘‘) as f: #newline=‘‘ 写入没有隔行
writer=csv.writer(f)
writer.writerow([‘123‘,‘12‘]) #单行写入,writerows多行写入
writer.writerows([[‘12‘,‘12‘],[‘1‘,‘2‘]])


声明列名
listData=[{‘title‘:‘qwe‘,‘content‘:‘asds‘},{‘title‘:‘asdds‘,‘content‘:‘adas‘},{‘title‘:‘‘,‘content‘:‘asddas‘}]
filednames=[‘title‘,‘content‘] #声明列名
with open(‘1.csv‘,mode=‘a‘,newline=‘‘) as f:
writer=csv.DictWriter(f,fieldnames=filednames) #初始化writer
writer.writerows(listData)

 

以上是关于我的第二十七篇博客---beautifulsoup与csv操作方法的主要内容,如果未能解决你的问题,请参考以下文章

我的第十七篇博客---CSS

第二十七篇使用MVVM布局页面

第二十七篇 人间正道

python全栈开发基础第二十七篇IO模型

第二十七篇 类和对象相关知识

Python之路(第二十七篇) 面向对象进阶:内置方法描述符