我的第二十七篇博客---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)

原文地址:https://www.cnblogs.com/sll-csdn/p/10926081.html

时间: 2024-10-08 12:08:58

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

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

css选择器:将css添加到<head>与</head>之间,并用<style></style>标记声明的一种样式.语法如下:<style>这里写css内容</style> 全局选择器:设置所有标签使用同一样式,用*表示语法:*{}例如:*{color:red;} 所有字体都为红色 标签选择器:用于声明标记采用的样式语法:p{color:red;} 所有p标签里的文字都是红色 类选择器:用来为一系列标签定义相同的样式语法: .类名{c

我的第二十三篇博客---爬虫简介

网络爬虫(又被称为网页蜘蛛,网络机器人) 就是模拟客户端(主要指浏览器)发送网络请求,接收请求响应,按照一定的规则,自动地抓取互联网信息的程序.原则上,只要是客户端(主要指浏览器)能做的事情,爬虫都能够做. 爬虫分类:通用爬虫:通常指搜索引擎的爬虫(百度,谷歌) 聚焦爬虫:针对特定网站的爬虫 积累式爬虫:从开始运行到打到停止条件的过程中不断爬取目标数据,过程中会进行去重操作增量式爬虫:只爬取新产生的或者已经发生变化网页的爬虫深网爬虫:隐藏在搜索表单或登录表单之后的数据,只有用户提交一些关键词或登

我的第二十篇博客---Mysql基本命令

explain select name from student where name='小明';查看查询了多少行才找到 alter database 数据库名 character set utf8;  将数据库的编码改为utf8create database 数据库名 charset=utf8;   创建数据库指定编码为utf8 当一个表数据全部删除时,id设有主键自增,truncate table 表名;下次id从1开始 原表数据全部删除 要是不想全部删除 则 alter table 表名

我的第二十一篇博客---Mysql强化及应用于python

使用python读取数据库: from pymysql import connectconn=connect(host='localhost',port=3306,database='数据库名',user='root',password='密码',charset='utf8')#获取cursor对象cur=conn.cursor()#执行sql语句sql="select *from stu"cur.execute(sql)#fetchall取多条数据result=cur.fetchal

一篇博客让你了解RxJava

RxJava可以说是2016年最流行的项目之一了,最近也接触了一下RxJava,于是想写一篇博客,希望能通过这篇博客让大家能对其进行了解,本篇博客是基于RxJava2.0,跟RxJava1.0还是有很多不同的 基础知识 RxJava的核心就是"异步"两个字,其最关键的东西就是两个: Observable(被观察者) Observer/Subscriber(观察者) Observable可以发出一系列的 事件,这里的事件可以是任何东西,例如网络请求.复杂计算处理.数据库操作.文件操作等等

[iOS]关于 App 混合(Hybrid)开发的优化,包括H5、Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)

我们知道混合开发,可以节省很多成本(时间成本,经济成本等等),所以有很多公司比较钟爱这种开发形式,今天所讲的优化方式,也是我在我们公司的应用中实际用了的,而且我写的这个优化的 SDK 已经开源到 github 上了,有兴趣的同学可以下载来看一下,有不足的地方欢迎指正.这里给出链接:https://. 转载请注明出处:http://www.cnblogs.com/shisishao/p/6830736.html -.首先,先介绍下什么是混合开发: 我们通常把移动开发分为Web.Native和Hyb

第一篇博客

现在是高一期末考试结束后的第二天,拿着稳出年级150的成绩,怕是这辈子进第一实验班(八班)无望,便默默投身到也没什么希望的数学竞赛事业中继续苟着. 这本是初一时学习信竞而创建的博客,名义还是dyhisnota250.....真的想象不到当初的我有多么...咳咳. 此篇博客用于数学竞赛之路的开端,以后一本每天都会写上一篇.坚持下来应该能够取得不错的结果吧 如果断掉的话,多年来回首这篇数学竞赛开篇之博(勃?2333),便会深感自己实力之弱和毅力之水. 嗯,就这样开始吧. 原文地址:https://w

小白神器 - 一篇博客学会HTML

小白神器 - 一篇博客学会HTML 一. 简介 1. HTML 定义 htyper text markup language  即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. 2. 标签定义和属性 是由一对尖括号包裹的单词构成 例如: <html> *所有标签中的单词不可能以数字开头. 标签不区分大小写.<html> 和 <HTML>. 推荐使用小写. 标签分为两部分: 开始标签<a

一篇博客分清shell中的状态返回值-return-break-continue-exit

一篇博客分清shell中的状态返回值-return-break-continue-exit 一.break.continue.exit.return的区别和对比 条件与循环控制及程序返回值命令知识表 命令 说明 break n 如果省略n,则表示跳出整个循环,n表示跳出循环的层数 continue n 如果省略n,则表示跳出本次循环,忽略本次循环剩余代码,进入循环的下一次循环.n表示退到第n层继续循环 exit n 表示退出当前shell程序,n为上一次程序执行的状态返回值,n也可以省略,在下一