web抓取动态列表


<div class="col col-1-1"><h2 class="heading">Flowers</h2><ul class="icon-list">          <li class="col col-1-2 no-gutter">
<svg class="icon icon--medium">
<use xlink:href="https://"></use>
</svg>
measure 1<span class="icon-list__count">81</span>          </li>
<li class="col col-1-2 no-gutter">
<svg class="icon icon--medium">
<use xlink:href="https://"></use>
</svg>
measure 2 <span class="icon-list__count">52</span>          </li>
<li class="col col-1-2 no-gutter">
<svg class="icon icon--medium">
<use xlink:href="https://"></use>
</svg>
measure 3<span class="icon-list__count">29</span>          </li>
</ul></div>

这是一种花的度量列表的一个例子。如何获取度量值并存储在python字典中?希望代码是灵活的,以允许在另一个寻呼机上可能只有度量2和3,或者度量3和4(一个新的度量没有出现在这个页面上(,或者全新的度量4和5。

python新手-如有任何建议,不胜感激。

BeautifulSoup在抓取一个更静态、更不动态的网站时是最好的。尝试使用标记中存在的唯一标识符在这种树状结构中导航。这段代码将为您提供一个以度量值n为键、作为其值的字典。

from bs4 import BeautifulSoup
import re
html = '<div class="col col-1-1"><h2 class="heading">Flowers</h2><ul class="icon-list"><li class="col col-1-2 no-gutter"><svg class="icon icon--medium"><use xlink:href="https://"></use></svg>measure 1<span class="icon-list__count">81</span></li><li class="col col-1-2 no-gutter"><svg class="icon icon--medium"><use xlink:href="https://"></use></svg>measure 2 <span class="icon-list__count">52</span></li><li class="col col-1-2 no-gutter"><svg class="icon icon--medium"><use xlink:href="https://"></use></svg>measure 3<span class="icon-list__count">29</span></li></ul></div>'
soup = BeautifulSoup(html,'lxml')
li_tags = soup.find_all('li') # ['measure 181', 'measure 2 52', 'measure 329']
span_tags = soup.find_all('span',class_='icon-list__count') #  ['81', '52', '29']
li_list= []
for li in li_tags:
li_list.append(li.text)
measure_dict = {}
for i in range(len(li_list)):
li_list[i] = re.sub(span_tags[i].text,'',li_list[i])  #converting 'measure 181 into 'measure 1' and likewise
measure_dict[li_list[i]] = span_tags[i].text     # if you want the values as integers then use int(span_tags[i].text) in this line
print(measure_dict)

#{'measure 1': '81', 'measure 2 ': '52', 'measure 3': '29'}

如果我在这里使用的标识符class = 'icon-list__count'存在于您访问的每个页面中,而且它还包含您想要抓取的数据,那么代码将是灵活的。所以你可以希望它是一样的,如果不是,你必须遍历html标签,通过自己识别它们来找到你想要的数据。

如果网站在你想要抓取的地方使用Javascript((,那么最好使用Selenium,因为它是一个更好的动态网站抓取工具。

建议:
从长远来看,阅读模块的文档远比观看随机的YT视频更有帮助
无论何时您想玩字符串,都可以尝试使用re模块,它比string中预定义的方法要好得多

最新更新