我使用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)
结果打印出来:
[]
[]
[]
[]
答案 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_]")