pythonbeautiful
A. 爬虫利器 Beautiful Soup 之遍历文档
Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 python 库,它提供了一些简单的操作方式来帮助你处理文档导航,查找,修改文档等繁琐的工作。因为使用简单,所以 Beautiful Soup 会帮你节省不少的工作时间。
你可以使埋信用如下命令安装 Beautiful Soup。二选一即可。
Beautiful Soup 不仅支持 Python 标搜液辩准库中的 HTML 解析器,还支持很多第三方的解析器,比如 lxml,html5lib 等。初始化 Beautiful Soup 对象时如果不指定解析器,那么 Beautiful Soup 将会选择最合适的解析器(前提是你的机器安装了该解析器)来解析文档,当然你也可以手动指定解析器。这里推荐大家使用 lxml 解析器,功能强大,方便快捷,而且该解析器是唯一支持 XML 的解析器。
你可以使用如下命令来安装 lxml 解析器。二选一即可。
Beautiful Soup 使用来起来非常简单,你只需要传入一个文件操作符或者一段文本即可得到一个构建完成的文档对象,有了该对象之后,就可以对该文档做一些我们想做的操作了。而传入的文本大都是通过爬虫爬取过来的,所以 Beautiful Soup 和 requests 库结合使用体验更佳。
Beautiful Soup 将复杂的 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种: Tag,NavigableString,BeautifulSoup,Comment。
Tag 就是 HTML 的一个标签,比如 p,p 标签等,也是我们用的最多的一个对象。
NavigableString 指标签内部的文字,直译就是可遍历的字符串。
BeautifulSoup 指一个文档的全部内容,可以当成一个 Tag 来处理。
Comment 是一个特殊的 NavigableString,其输出内容不包括注视内容。
为了故事的顺利发展,我们先定义一串 HTML 文本,下文的所有例子都是基于这段文本的。
Tag 有两个很重要的属性,name 和 attributes。期中 name 就是标签的名字,attributes 是标签属性。标签的名字和属性是可以被修改的,注意,这种修改会直接改变 BeautifulSoup 对象。
由以上例子我么可以看出,可以直接通过点属性的方法来获取 Tag,但是这种方法只能获取第一个标签。同时我们可以多次调用点属性这个方法,来获取更深层次的标签。
如果想获得所有的某个名字的标签,则可以使用 find_all(tag_name) 函数。
我们可以使用 .contents 将 tag 以列表方式输出,即将 tag 的子节点格式化为列表,这很有用,意味着可以通过下标进行访问指定节点。同时我们还可以通过 .children 生成器对节点的子节点进行遍历。
.children 只可以获取 tag 的直接节点,而获取不到子孙节点,.descendants 可以满足你。
通过 .parent 属性获取标签的父亲节点。世缺 title 的父标签是 head,html 的父标签是 BeautifulSoup 对象,而 BeautifulSoup 对象的父标签是 None。
同时,我们可以通过 parents 得到指定标签的所有父亲标签。
通过 .next_sibling 和 .previous_sibling 来获取下一个标签和上一个标签。
你可能会纳闷,调用了两次 next_sibling 怎么只有一个输出呢,这方法是不是有 bug 啊。事实上是 p 的第一个 next_sibling 是 p 和 p 之间的换行符 。这个规则对于 previous_sibling 同样适用。
另外,我们可以通过 .next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出。在该例子中,我们在每次输出前加了前缀,这样就可以更直观的看到 dib 的第一个 previous_sibling 是换行符了。
通过 .next_element 和 .previous_element 获取指定标签的前一个或者后一个被解析的对象,注意这个和兄弟节点是有所不同的,兄弟节点是指有相同父亲节点的子节点,而这个前一个或者后一个是按照文档的解析顺序来计算的。
比如在我们的文本 html_doc 中,head 的兄弟节点是 body(不考虑换行符),因为他们具有共同的父节点 html,但是 head 的下一个节点是 title。即 soup.head.next_sibling=title soup.head.next_element=title
同时这里还需要注意的是 title 下一个解析的标签不是 body,而是 title 标签内的内容,因为 html 的解析顺序是打开 title 标签,然后解析内容,最后关闭 title 标签。
另外,我们同样可以通过 .next_elements 和 .previous_elements 来迭代文档树。由遗下例子我们可以看出,换行符同样会占用解析顺序,与迭代兄弟节点效果一致。
本章节介绍了 Beautiful Soup 的使用场景以及操作文档树节点的基本操作,看似很多东西其实是有规律可循的,比如函数的命名,兄弟节点或者下一个节点的迭代函数都是获取单个节点函数的复数形式。
同时由于 HTML 或者 XML 这种循环嵌套的复杂文档结构,致使操作起来甚是麻烦,掌握了本文对节点的基本操作,将有助于提高你写爬虫程序的效率。
B. python怎么把一个单词加到两个单词的中间
利用正则尘亩表达式可以实现,以下代码演示在单词hello和python之间添加单词世清beautiful:
import re
text = 'hello python!'
pattern = r'(?=python)'
add_word = 'beautiful'
result = re.sub(pattern,add_word + '派返森 ',text)
print(result)
输出:
hello beautiful python!
C. Python与爬虫有什么关系
爬虫一般是指网络资源的抓取,因为python的脚本特性,python易于配置,对字符的处理也非常灵活,加上python有丰富的网络抓取模块,所以两者经常联系在一起。 简单的用python自己的urllib库也可以;用python写一个搜索引擎,而搜索引擎就是一个复杂的爬虫。从这里你就了解了什么是Python爬虫,是基于Python编程而创造出来的一种网络资源的抓取方式,Python并不是爬虫。
Python为什么适合些爬虫?
1)抓取网页本身的接口
相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)
此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
2)网页抓取后的处理
抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。Life is short, u need python.
D. python3 爬虫 一定要用beautiful soup吗
BeautifulSoup4的安装
一、使用pip直接安装beautifulsoup4 (如何安装pip请看上一篇文章介绍)
F:\kanbox\pythoncode\zyspider>pip install beautifulsoup4
Collecting beautifulsoup4
Downloading beautifulsoup4-4.4.0-py3-none-any.whl (80kB)
328kB/s
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.4.0
F:\kanbox\pythoncode\zyspider>
或者从官网下载Beautifulsoup的软件包,然后解压,cmd命令行进入解压包目录,输入以下命令安装:python setup.py install
=======================================
网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例代码:
1 __author__ = 'zdz8207'
2 from bs4 import BeautifulSoup
3
4 import urllib.request
5 import urllib.parse
6 import re
7 import urllib.request, urllib.parse, http.cookiejar
8
9 def getHtml(url):
10 cj = http.cookiejar.CookieJar()
11 opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
12 opener.addheaders = [('User-Agent',
13 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'),
14 ('Cookie', '4564564564564564565646540')]
15
16 urllib.request.install_opener(opener)
17
18 html_bytes = urllib.request.urlopen(url).read()
19 html_string = html_bytes.decode('utf-8')
20 return html_string
21
22 html_doc = getHtml("http://zst.aicai.com/ssq/openInfo/")
23 soup = BeautifulSoup(html_doc, 'html.parser')
24
25 # print(soup.title)
26 #table = soup.find_all('table', class_='fzTab')
27 #print(table)#<tr onmouseout="this.style.background=''" 这种tr丢失了
28 #soup.strip() 加了strip后经常出现find_all('tr') 只返回第一个tr
29 tr = soup.find('tr',attrs={"onmouseout": "this.style.background=''"}) 30 #print(tr) 31 tds = tr.find_all('td') 32 opennum = tds[0].get_text() 33 #print(opennum) 34 35 reds = [] 36 for i in range(2,8): 37 reds.append(tds[i].get_text()) 38 #print(reds) 39 blue = tds[8].get_text() 40 #print(blue) 41 42 #把list转换为字符串:(',').join(list) 43 #最终输出结果格式如:2015075期开奖号码:6,11,13,19,21,32, 蓝球:4 44 print(opennum+'期开奖号码:'+ (',').join(reds)+", 蓝球:"+blue)
E. python使用beautiful soap时查到一段代码,不太了解,求大神解释
您好,如果你用的是新版的Den或ubuntu,那么可以通过系统的软件包管理来安装:
$ apt-get install Python-bs4
Beautiful Soup 4 通过PyPi发布,所以如果你无法使用系统包管理安装,那么也可以通过 easy_install 或 pip 来安装.包的名字是beautifulsoup4 ,这个包兼容Python2和Python3.
$ easy_install beautifulsoup4
$ pip install beautifulsoup4
(在PyPi中还有一个名字是 BeautifulSoup 的包,但那可能不是你想要的,那是 Beautiful Soup3 的发布版本,因为很多项目还在使用BS3, 所以 BeautifulSoup 包依然有效.但是如果你在编写新项目,那么你应该安装的 beautifulsoup4 )
如果你没有安装 easy_install 或 pip ,那你也可以 下载BS4的源码 ,然后通过setup.py来安装.
$ Python setup.py install
如果上述安装方法都行不通,Beautiful Soup的发布协议允许你将BS4的代码打包在你的项目中,这样无须安装即可使用.
作者在Python2.7和Python3.2的版本下开发Beautiful Soup, 理论上Beautiful Soup应该在所有当前的Python版本中正常工作。
F. python中bs4.beautiful解析有时候不加前边的bs4 有什么区别
这个就是看你是如何import包的
如果是import bs4,那么就应该是bs4.BeautifulSoup
如果是from bs4 import BeautifulSoup,就可以直接使用BeautifulSoup
G. python是什么干什么用的 四个你需要知道的主要用途
Python是一种全栈的开发语言,所以你如果能学好Python,那么前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。python有四大主要应用:网络爬虫,web开发,人工智能以及自动化运维。
1.网络爬虫
相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁。python的urllib2包提供了较为完整的访问网页文档的API。抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
2.web开发
python最大的特点就是简洁,使用python做网站开发,在代码的维护方面可以节省很大的精力。而且python还有很多优秀的web框架可以使用。
3.人工智能
人工智能的核心算法是完全依赖于C/C++的,因为是计算密集型。Python是这些库的API binding,使用Python是因为CPython的胶水语言特性,要开发一个其他语言到C/C++的跨语言接口,Python是最容易的,比其他语言的ffi门槛要低不少,尤其是使用Cython的时候,Python历史上也一直都是科学计算和数据分析的重要工具,有numpy的底子,用numpy这样的基础库既减少了开发工作量,也方便从业人员上手。
4.自动化运维
一个运维人员通常要管理上百、上千台服务器,运维工作也变的重复、繁杂。把运维工作自动化,python能够把运维人员从服务器的管理中解放出来,让运维工作变得简单、快速、准确.
H. python中常见的运算符有哪些分类
Python中的运算符主要分为六大类,其中包含算术运算符、赋值运算符、比较/关系运算符、逻辑运算符、位运算符以及三目运算符。
1、Python算术运算符
是对数值类型的变量进行运算的,比如说:加、减、乘、除、取模和乘方运算等;
2、Python赋值运算符
是对已存在的变量进行重新设置新值的运算符;
3、Python关系运算符(也被称为比较运算符)
关系运算符结果一般包含bool、True、False等,而关系表达式经常用在if结构的条件中或循环结构的条件中;
4、Python逻辑运算符
是用于连接多个条件,一般来讲就是关系表达式;
5、Python位运算符
主要是用于数值类型的二进制的运算;
6、Python三目运算符
在Python中,没有其他语言的三目运算符,可以借助if语言实现类似的三目运算符。