1. 正则表达式
RegexPal:在线测试正则表达式网站
抓取网站上的图片的 URL链接,非常直接的做法就是用 findAll("img") 抓取所有图片,但是还有隐藏图片的时候,需要用正则表达式来筛选了。
import urllib2 import bs4 import re html = urllib2.urlopen("http://www.pythonscraping.com/pages/page3.html") bsObj = bs4.BeautifulSoup(html.read(), "lxml") images = bsObj.findAll("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")}) for image in images: print(image["src"])
这段代码会打印出图片的相对路径,都是以 ../img/gifts/img 开头,以 .jpg 结尾
2. Lambda表达式
Lambda 表达式本质上就是一个函数,可以作为其他函数的变量使用;也就是说,一个函数不是定义成 f(x, y),而是定义成 f(g(x), y),或 f(g(x), h(x)) 的形式。
#获取有两个属性的标签:
soup.findAll(lambda tag: len(tag.attrs) == 2)
结果:
<div class="body" id="content"></div>
<span style="color:red" class="title"></span>