2016-07-06 11 views
1

に私はそれがあるHTMLページで、次のIDのいずれかに一致するものを見つけないように私の正規表現が間違っていないことを確認するためにregextester101を使用:私はpj_8c1bde71686c6c05パイソン - BS4正規表現のマッチング結果[]

ページこすりしようとしている:私はhtmlファイルからテストとして使用していますhttp://www.indeed.ca/help-desk-jobs-in-ON

ID:pj_8c1bde71686c6c05

bs4 = BeautifulSoup(search_result_contents, "html.parser") 
result = bs4.find_all('div', re.compile('id_=p\w*_\w*')) 
print(result) 

結果が出て印刷します。

[] 
[] 
[] 
[] 
+0

をあなたは 'のid =の後にアンダースコアを持って'「doesnのあなたの正規表現で実際にページに表示されているようです。 – kindall

+0

ああ気付かなかった!私はそれを削除しましたが、まだ同じ結果が得られています:/ –

+0

@FiendBusaは、CSSセレクタの代替オプションでも更新されました。見てみな。 – alecxe

答えて

2

正規表現をid属性に適用するには、id引数を使用する必要があります。

ここ pj_\w+
bs4.find_all('div', id=re.compile(r'pj_\w+')) 

pjに一致し、アンダースコアが続き、一つ以上の英数字が続く:また、あなたは「生」の文字列を使用して、正規表現を修正する必要があります。

デモ:

>>> import re 
>>> import requests 
>>> from bs4 import BeautifulSoup 
>>> 
>>> url = "http://www.indeed.ca/help-desk-jobs-in-ON" 
>>> 
>>> response = requests.get(url) 
>>> 
>>> soup = BeautifulSoup(response.content, "html.parser") 
>>> soup.find_all('div', id=re.compile(r'pj_\w+')) 
[<div class="row result" data-jk="13fdade4fb44d84f" id="pj_13fdade4fb44d84f">\n... 
>\n</div>\n<span class="sdn">Sponsored</span>\n</br></div>] 
また

、あなたはCSS selector "で始まり、" 使用することができます。

bs4.select("div[id^=pj_]") 
+0

htmlページに3つ以上の正規表現がマッチしている場合でも、3つの結果しか得られない理由は分かりますか? –

+0

@ FiendBusa実際、そこに一貫性があります。ブラウザコンソールで '$$(" div [id^= pj _] ")。length"を実行すると5になります。 'len(BeautifulSoup(response.content、" html.parser ")。select( "div [id^= pj _]")) ' - 私も5 .. – alecxe

+0

です。すべての結果が1つの要素に含まれているからです。より多くのものの創造を決めるのかどうかは分かりません。正規表現に一致するすべてのidsが存在しますが、それらはただ1つの行にあります。 –