2017-02-11 7 views
2

Есть ли способ предоставить несколько аргументов методу beautifulsoup select?Извлечение нескольких тегов через beautifulsoup css selector

Я получаю данные через soup.select('div[class^="TypeA"]'. Это выводит мне все divs, где классы соответствуют шаблону TypeA. Мне интересно получить, кроме того, еще один div, где class="TypeB" (точное совпадение).

Теперь я могу сделать это в двух отдельных проходах, например. что-то вроде:

r = requests.get(jurl) 
soup = BeautifulSoup(r.text,"lxml") 
list1 = [] 
#get typeA divs 
for div in soup.select('div[class^="TypeA"]'): 
    t = [text for text in div.stripped_strings] 
    list1.append(t) 
list2 = [] 
#get typeB divs 
for div in soup.select('div[class^="TypeB"]'): 
    t = [text for text in div.stripped_strings] 
    list2.append(t) 
#combine the two into tuples. Both lists are of the same size 
list3 = [] 
count = 0 
for item in list1: 
    list3.append((item,list2[count])) 
    count += 1  
print list3 

Но можно ли это сделать за один проход? Пройдя через documentation, не сразу видно, как это можно сделать.

+0

Вы можете использовать '' zip' функцию для див1, div2 в ZIP (soup.select ('DIV [класс^= "TypeA"] '), soup.select (' div [class^= "TypeB"] ')): ' – Arman

ответ

2
soup.select('div[class^="TypeA"], div[class^="TypeB"]') 

Используйте , использовать несколько селекторов

CSS Selector Reference

enter image description here

+0

Что это? почему два класса типа A? – Arman

+0

Еще раз спасибо 宏杰 李! –