python 階層 BeautifulSoupで複数の条件を使用する




python3 webスクレイピング (2)

あなたはリストとしてテキストを渡すことができます(このサイトは私の前の答えの例です:))

import requests
from bs4 import BeautifulSoup

res = requests.get('http://www.snapdeal.com/products/computers-laptops?sort=plrty&')
soup = BeautifulSoup(res.text)

elements = soup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(14|4)')) # | means 'or'

print elements 

[<div class="lfloat">(14)</div>, <div class="lfloat">(4)</div>, <div class="lfloat">(45)</div>]印刷すると、 [<div class="lfloat">(14)</div>, <div class="lfloat">(4)</div>, <div class="lfloat">(45)</div>]

だからあなたのsoup.find_all(class_="label",text=re.compile(r'(Fiscal|yeah)))

完全一致で検索するには、 textをリストとして渡すことができtextsoup.find_all(class_="label",text=['Fiscal', 'yeah'])

soup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(Fiscal|[^yeah])'))を使って、「Find Fiscal and NOT yeah」のロジックをsoup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(Fiscal|[^yeah])'))ことができます。 soup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(Fiscal|[^yeah])')) (ここではわからない)

このコードでは、「Fiscal」というテキストを含むタグを検索します。

soup.find(class_="label",text=re.compile("Fiscal"))

ここに複数の条件を入れるにはどうすればいいですか?

「財政」と「年」の両方を含むタグがあります。

または、「財政」と「年」を含まないタグ


条件が異なることがわかり、さらに複雑になる場合は、関数をフィルタとして使用できます。例:

「財政」と「年」の両方を含むタグがあります。

t = soup.find(class_="label", text=lambda s: "Fiscal" in s and "year" in s)

または、「財政」と「年」を含まないタグ

t = soup.find(class_="label", text=lambda s: "Fiscal" in s and "year" not in s)

ここでも正規表現を使うことができますが、読みにくいかもしれません。







beautifulsoup