我不熟悉Web抓取,这是我的第一个Web抓取项目,我找不到适合我的soup.select("")
的选择器
我想获得“数据电话”(请参见下面的图片),但在div班级中,然后在<a href>
之后,这对我来说有点复杂!
我在网上搜索,发现自己必须使用汤。find_all,但这不是很有帮助。有人可以帮我还是给我一个快速提示?谢谢!
我的代码:
import webbrowser, requests, bs4, os
url = "https://www.pagesjaunes.ca/search/si/1/electricien/Montreal+QC"
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text)
result = soup.find('a', {'class', 'mlr__item__cta jsMlrMenu'})
Phone = result['data-phone']
print(Phone)
答案 0 :(得分:1)
我认为最简单的方法之一是使用soup.select
,它允许使用普通的CSS选择器。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors
soup.select('a.mlr__item_cta.jsMlrMenu')
这应该返回锚点的完整列表,您可以从中选择数据属性。
请注意,我只是在终端上尝试过
from bs4 import BeautifulSoup
import requests
url = 'https://en.wikipedia.org/wiki/Web_scraping'
r = requests.get(url)
soup = BeautifulSoup(r.text)
result = soup.select('a.mw-jump-link') # or any other selector
print(result)
print(result[0].get("href"))
您将不得不遍历soup.select
的结果,而只是从属性中收集data-phone
的值。
好吧,我自己在DOM
中进行了搜索,这是我设法检索所有电话数据的方法:
anchores = soup.select('a[data-phone]')
for a in anchores:
print(a.get('data-phone'))
它也仅适用于像这样的数据选择器:soup.select('[data-phone]')
令人惊讶的是,对我来说,它也可以与以下类一起使用:
for a in soup.select('a.mlr__item__cta.jsMlrMenu'):
print(a.get('data-phone'))
毫不奇怪,我们在第一个选择器中遇到了错字... 找到不同的地方:)
好:a.mlr__item__cta.jsMlrMenu
不好:a.mlr__item_cta.jsMlrMenu