1. 导航树
经典的HTML树状结构
直接看下面的代码示例:(注意目标网页的标签大小写等细节,易出bug)
1 from urllib.request import urlopen 2 from bs4 import BeautifulSoup 3 4 html = urlopen("http://www.pythonscraping.com/pages/page3.html") 5 bsobj = BeautifulSoup(html) 6 7 print(bsobj) 8 9 # 打印giftlist表格中所有产品的数据行,注意代码中标签的大小写格式10 for child in bsobj.find("table", { "id":"giftList"}).children:11 12 # 打印所有的后代标签13 for child in bsobj.find("table", { "id":"giftList"}).descendants:14 print(child)15 16 # 处理兄弟标签,可以选择表格中除标题(标签本身)外的所有行,或者所有兄弟标签17 for sibling in bsobj.find("table",{ "id":"giftList"}).tr.next_siblings:18 print(sibling)
1 # 处理父标签,2 # 1)选择图片标签src=".../";3 # 2)选择图片标签的父标签(在示例中是标签);4 # 3)选择标签的前一个兄弟标签previous_sibling(在示例中是包含美元价格的标签);5 # 4)选择标签中的文字,“$15.00”.6 print(bsobj.find("img",{ "src":".../img/gifts/img1.jpg"7 }).parent.previous_sibing.get_text())
核心知识点,4个函数:
.children,处理子标签;
.descendants,处理后代标签;
.next_siblings,处理兄弟标签,尤其适用于处理表格,可以通过该函数选择表格中除标题行外的所有行。(1.对象不能把自己作为兄弟标签;2.该函数只调用后面的兄弟标签)
.parent,处理父标签,应用相对较少。 2. 正则表达式
正则表达式,识别 正则字符串。上手快,记住/懂常用规则/勤查文档即可,运行很快,比如在要求快速浏览大文档查,以查找像电话号码或者邮箱地址等类似的字符串时,非常方便。
3. 正则表达式和BeautifulSoup
写正则表达式前,先写一个步骤列表描述出目标字符串结构。 正则表达式可以作为BeautifulSoup语句的任意一个参数。
1 from urllib.request import urlopen 2 from bs4 import BeautifulSoup 3 import re 4 5 html = urlopen("http://www.pythonscraping.com/pages/page3.html") 6 bsobj = BeautifulSoup(html,"lxml") 7 8 # 源网页图片路径代码 9 images = bsobj.findAll("img",{ "src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})10 for image in images:11 print(image["src"]) 打印结果:
../img/gifts/img1.jpg
../img/gifts/img2.jpg../img/gifts/img3.jpg../img/gifts/img4.jpg../img/gifts/img6.jpg还有获取属性操作。。。