Soup.Find与不同的类

时间:2017-01-29 20:58:41

标签: python beautifulsoup

我有一个关于python的问题,我想用不同的属性类抓取1页并循环它们,所以这是我需要的html代码:

  

'a':“class:a”

     

'div':“class:b”

     

'h1':“class:c”

页面只有其中一个,所以我尝试使用“else if”和“try”语句,但我仍然没有得到它。此代码仅适用于一个类:

#!/usr/bin/env python

import csv
import requests
from bs4 import BeautifulSoup

urls = csv.reader(open('link.csv'))
for url in urls:
    response = requests.get(url[0])
    html = response.content
    soup = BeautifulSoup(html, 'html.parser')
    condition = soup.find('a', attrs={'class': 'a'}).get_text()
    print (condition)

我在这个论坛中寻找另一个相同的问题,但我仍然坚持这个。 我希望有人能帮助我,谢谢你。

2 个答案:

答案 0 :(得分:0)

如果要选择元素的所有变体,可以使用.select()方法以及三个相关的CSS选择器来覆盖您提供的示例a.a, div.b, h1.c

如果有任何匹配的元素,您可以抓住第一个并获取其文本:

elements = soup.select('a.a, div.b, h1.c')
if elements:
    condition = elements[0].get_text()
    print(condition)

答案 1 :(得分:0)

import bs4
html = """<html>
 <head>
  <div class="a"></div>
  <a class="b"></a>
  <h1 class="c"></h1>
 </body>
</html>"""

soup = bs4.BeautifulSoup(html, 'lxml')
soup.find_all(class_=['a', 'b', 'c'])
soup.select('.a, .b, .c')

find()中,[a, b, c]表示a或b或c

select()中,a, b, c表示a或b或c