如何使用从BS4中查找所有方法来刮取某些字符串

时间:2016-08-01 18:36:17

标签: python python-3.x web-scraping beautifulsoup bs4

<li class="sre" data-tn-component="asdf-search-result" id="85e08291696a3726" itemscope="" itemtype="http://schema.org/puppies">
  <div class="sre-entry">
    <div class="sre-side-bar">
    </div>
    <div class="sre-content">
      <div class="clickable_asdf_card" onclick="window.open('/r/85e08291696a3726?sp=0', '_blank')" style="cursor: pointer;" target="_blank">

我需要抓住字符串&#39; / r / 85e08291696a3726?sp = 0&#39;它发生在整个页面中。我不确定如何使用soup.find_all方法来执行此操作。我需要的字符串总是出现在&#39;旁边。

这就是我的想法(下图),但显然我得到的参数不对。如何格式化find_all方法以返回&#39; / r / 85e08291696a3726?sp = 0&#39;整个页面中的字符串?

for divsec in soup.find_all('div', class_='clickable_asdf_card'):
    print('got links')
    x=x+1

我阅读了bs4的文档,我正在考虑使用find_all(&#39; clickable_asdf_card&#39;)来查找我需要的所有字符串,但接着是什么?有没有办法调整参数以返回我需要的字符串?

1 个答案:

答案 0 :(得分:2)

使用BeautifulSoup的{​​{3}}查找并从onclick属性值中提取所需的子字符串:

import re

pattern = re.compile(r"window\.open\('(.*?)', '_blank'\)")
for item in soup.find_all(onclick=pattern):
    print(pattern.search(item["onclick"]).group(1))

如果您只想找到一个元素,请使用find()代替find_all()