Python - Bs4正则表达式匹配结果到[]

时间:2016-07-06 00:05:39

标签: python regex beautifulsoup

我使用regextester101来确认我的正则表达式不正确,因为它确实找到了HTML页面中以下ID之一的匹配项:pj_8c1bde71686c6c05

页面我正在努力抓取:http://www.indeed.ca/help-desk-jobs-in-ON

ID我用作html文件中的测试:pj_8c1bde71686c6c05

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

结果打印出来:

[]
[]
[]
[]

1 个答案:

答案 0 :(得分:2)

如果要将正则表达式应用于id属性,则需要使用id参数。此外,您需要使用“原始”字符串并修复正则表达式:

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

此处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>]

或者,您可以使用“starts-with”CSS selector

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