Python网络数据采集--第二章

from urllib.request import urlopen
from bs4 import BeautifulSoup
##2.1
#我们可以抓出整个页面,然后创建一个BeautifulSoup 对象
html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsopj = BeautifulSoup(html)

#2.2.1
## 查找
nameList = bsopj.find_all("span", {"class":"green"})
nameList1 = bsopj.find_all(text="the prince")
# for name in nameList:
#     print(name.get_text())
#print(len(nameList1))
#.get_text() 会把你正在处理的 HTML 文档中所有的标签都清除,然后返回一个只包含文字的字符串。 假如你正在处理一个包含许多超链接、段落和标签的大段源代码, 那么 .get_text() 会把这些超链接、段落和标签都清除掉,只剩下一串不带标签的文字。
#用 BeautifulSoup 对象查找你想要的信息,比直接在 HTML 文本里查找信息要简单得多。 通常在你准备打印、存储和操作数据时,应该最后才使用 .get_text()。一般情况下,你应该尽可能地保留 HTML 文档的标签结构。

#关键词参数keyword:可以让你选择那些具有指定属性的标签。
#allTxt = bsopj.find_all(id = "text")
#allTxt = bsopj.find_all("",{"id":"text"})#这俩其实一样的
#print(allTxt)

#2.2.2其他beautifulSoup对象
#•BeautifulSoup 对象
#前面代码示例中的 bsObj
#• 标签 Tag 对象
# BeautifulSoup 对象通过 find 和 findAll,或者直接调用子标签获取的一列对象或单个
# 对象,就像:bsObj.div.h1
#•其他不常用

#2.2.3导航树
#1.处理子标签和其他后代标签??????????其实不太懂
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html)
# for child in bsObj.find("table",{"id":"giftList"}).children:
#     print(child)
#2.处理兄弟标签
#next_siblings() 函数可以让收集表格数据成为简单的事情,尤其是处理带标题行的表格
# for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings:
#     print(sibling)
#兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 则与之相反,如果节点不存在,则返回 None
#3.父标签处理
#较为少用
#print(bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())

#2.3正则表达式
#2.4正则表达式和beautifulsoup
import re
images = bsObj.find("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
# for image in images:
#     print(image["src"])
#2.5获取属性
#print(images.attrs["src"])

#2.6Lambda表达式
# BeautifulSoup 用这个函数来评估它遇到的每个标签对象,最后把评估结果为“真”的标签保留,把其他标签剔除。
#下面的代码就是获取有两个属性的标签:
print(bsObj.findAll(lambda tag: len(tag.attrs) == 2))

#2.7超越BeautifulSoup
# BeautifulSoup是 Python 里最受欢迎的 HTML 解析库之一,但是除了lxml、HTML parser也可以

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值