【问题标题】:How to select element using regex and an attribute如何使用正则表达式和属性选择元素
【发布时间】:2020-03-19 07:41:32
【问题描述】:
我想抓取linkedin 仅供个人使用(需要获得朋友公司页面的帖子),我正在使用 Selenium 和 BeautifulSoup 来解决这个问题。
我发现每个帖子都是一个 div,它们都有 ember-view 类,但赞助帖子也有这个类,我不想刮,更多地挖掘 HTML 代码,我发现我可以选择用户帖子通过选择具有以下值的所有 div:urn:li:activity:XXXXXXXXXX 的 data-urn 属性。
但是在每个帖子 div 中,XXXXXXX 是一个不同的数字,我如何选择所有带有 data-urn=urn:li:activity:XXXXXXXXX 的 div,因为 XXXXXXXX 在每个 div 中都是一个不断变化的数字?
【问题讨论】:
标签:
python
web-scraping
css-selectors
【解决方案1】:
另一种解决方案。
from simplified_scrapy import SimplifiedDoc,req,utils
html='''
<div>
<div class="ember-view" data-urn="urn:li:activity:123">123</div>
<div class="ember-view" data-urn=urn:li:activity:456>456</div>
<div class="ember-view" data-urn=urn:li:activity:789>789</div>
<div class="ember-view">other</div>
</div>
'''
doc = SimplifiedDoc(html)
# First way
divs = doc.getElementsByReg('data-urn[\s"=]+urn:li:activity:[\d]+',tag="div").text
print (divs)
# Second way
divs = doc.selects('div.ember-view').containsReg('urn:li:activity:[\d]+',attr="data-urn").text
print (divs)
结果:
['123', '456', '789']
['123', '456', '789']