from bs4 import BeautifulSoup html_sample='/ <html>/ <body>/ <h1 id="title">Hello world</h1>/ <a href="" class="link">This is link1</a>/ <a href="" class="link">This is link2</a>/ </body>/ </html>' soup=BeautifulSoup(html_sample,'html.parser')PRint(soup.text) # 去除标签输出soup的内容header=soup.select('h1') # 搜索soup里的h1标签,再给headerprint(header) print(header[0]) # 把搜索出来的h1标签的第一个打印出来print(header[0].text) #第一个h1标签的内容alink=soup.select('a') # 搜索soup里的a标签,再给alinkprint(alink) print(alink[0]) #把搜索出来的a标签的第一个打印出来print(alink[0].text) #第一个a标签的内容for link in alink: #遍历alink print(link)for link in alink: print(link.text)for link in alink: print(link['href']) #遍历a标签里的href属性 a='<a href="#link3" class="link" style="CSS code">This is link3</a>'soup2=BeautifulSoup(a,'html.parser')print(soup2.select('a')[0]['style']) #打印第一个a标签的style属性BeautifulSoup实例2:
前面的时间和后面的新闻标题url分别来自2个不同的列表,如何让他们并行输出呢?
可以用zip()并行迭代的方法:
for times,news in zip(time, new)
zip()说明:
例如,有两个列表
a = [1,2,3]b = [4,5,6]使用zip()函数来可以把列表合并,并创建一个元组对的列表。
zip(a,b)[(1, 4), (2, 5), (3, 6)]在python 3.0中zip()是可迭代对象,使用时必须将其包含在一个list中,方便一次性显示出所有结果
list(zip(a,b))[(1, 4), (2, 5), (3, 6)]zip()参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入参数的长度不同时,zip能自动以最短序列长度为准进行截取,获得元组。
>>> l1,l2,l3 = (1,2,3),(4,5,6),(7,8,9)>>> zip(l1,l2,l3)[(1, 4, 7), (2, 5, 8), (3, 6, 9)]>>> str1 = 'abc'>>> str2 = 'def123'>>> zip(str1,str2)[('a', 'd'), ('b', 'e'), ('c', 'f')]zip()方法用在for循环中,就会支持并行迭代:
l1 = [2,3,4]l2 = [4,5,6]for (x,y) in zip(l1,l2): print x,y,'--',x*y2 4 -- 83 5 -- 154 6 -- 24
新闻热点
疑难解答