我正在尝试抓取产品的标题和价格。我面临一个问题,网站的类别各不相同。这是一个例子,
<a class="G-ab" href="thewebsite.com"><div class="G-l"><div class="G-m">Product Name</div></div><div class="G-k"><div>S$230</div><div>Product Description</div><div>Used</div></div></a>
当我使用另一台电脑时,它会显示这个,
<a class="K-ab" href="thewebsite.com"><div class="K-l"><div class="K-m">Product Name</div></div><div class="K-k"><div>S$230</div><div>Product Description</div><div>Used</div></div></a>
我意识到他们将类(class)更改为随机字母。我目前正在使用 BeautifulSoup4 和请求库。有没有什么方法可以上课,除了想上一整堂长的“if-elif”课?我要抓取的网站是 carousell.com我目前正在使用 lxml 解析器,如果这有任何帮助的话。感谢您的宝贵时间。
BeautifulSoup 允许您使用 regex as the filter .在您的站点中,a
标记的类名称中包含 -ab
。
你可以使用
soup.find_all('a',class_=re.compile("-ab"))
但在某些情况下,类名中不需要任何通用术语,您可以检查是否可以尝试在类名中使用方法 Going back and forth, Going sideways , Going down和 Going up文档的各个部分以某种方式唯一地标识您需要的元素,而不依赖于类名。
回到你的问题
html="""
<a class="G-ab" href="thewebsite.com"><div class="G-l"><div class="G-m">Product Name</div></div><div class="G-k"><div>S$230</div><div>Product Description</div><div>Used</div></div></a>
<a class="K-ab" href="thewebsite.com"><div class="K-l"><div class="K-m">Product Name</div></div><div class="K-k"><div>S$230</div><div>Product Description</div><div>Used</div></div></a>
"""
from bs4 import BeautifulSoup
import re
soup=BeautifulSoup(html,'html.parser')
a_links=soup.find_all('a',class_=re.compile("-ab"))
print(a_links)
输出:
[<a class="G-ab" href="thewebsite.com"><div class="G-l"><div class="G-m">Product Name</div></div><div class="G-k"><div>S$230</div><div>Product Description</div><div>Used</div></div></a>, <a class="K-ab" href="thewebsite.com"><div class="K-l"><div class="K-m">Product Name</div></div><div class="K-k"><div>S$230</div><div>Product Description</div><div>Used</div></div></a>]
两个包含-ab
的不同类名的a
标签都被选中。
我是一名优秀的程序员,十分优秀!