【问题标题】:Yelp Web Scraping - Beautiful Soup and PythonYelp Web Scraping - 美丽的汤和 Python
【发布时间】:2021-01-21 06:45:50
【问题描述】:

我对网络抓取非常陌生,我正在尝试为我的一个项目获取“设施和更多”下的项目。如下所示,我想从餐厅的 Yelp 页面中提取“健康评分优秀”、“提供外卖”、“提供外卖等”。我想为其他几家餐厅的 Yelp 页面执行此操作,但现在我将决定只搞清楚这个问题。

据我了解,我从不同的网页中了解,但没有得到很好的结果。

url='https://www.yelp.com/biz/ziggis-coffee-longmont'
yelp_page=requests.get(url)
yelp_soup=BeautifulSoup(yelp_page.content, 'lxml')
yelp_soup.find_all("span")

结果[<span class="offscreen" id="page-content"> </span>]

当我点击“Offers Takeout”上方的“inspect”时,我正在选择“span”。

我尝试过的其他方法是:

yelp_soup.find_all("span",{'class': "text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weigt--semibold__373c0__h2l0fe text-size--large__373c0__3t60B"})

yelp_soup.find_all("span",{'class': "text__373c0__2Kxyz"})

结果:[]

请建议如何进行。 谢谢

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    我尝试在我的最后抓取此页面。 lxml 似乎没有掌握您正在寻找的跨度。我将lxml 更改为html.parser(用于解析HTML 的python 内置工具),soup.find_all() 应该可以正常工作。另外,请记住,当你抓取一个类时,你也必须在其中包含它的空格。 (请注意,您的屏幕截图中类的开头有一个空格。)否则,BeautifulSoup 将无法找到所需的元素。

    这是在我的端运行良好的代码:

    from bs4 import BeautifulSoup
    import requests
    
    url='https://www.yelp.com/biz/ziggis-coffee-longmont'
    yelp_page=requests.get(url)
    print(yelp_page.status_code)
    yelp_soup=BeautifulSoup(yelp_page.content, 'html.parser')
    spans = yelp_soup.find_all("span")
    
    print(yelp_soup.find_all('span', class_=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B"))
    
    

    回复:

    [<span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">Drive-thru</span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">Delivery</span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">Takeout</span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B"><a class=" link__373c0__1G70M link-color--blue-dark__373c0__85-Nu link-size--inherit__373c0__1VFlE" href="/inspections/ziggis-coffee-longmont" name="" rel="" target="">Health Score</a></span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">Offers Delivery</span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">Offers Takeout</span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">Accepts Credit Cards</span>, <span class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B"><a class=" link__373c0__1G70M link-color--blue-dark__373c0__85-Nu link-size--inherit__373c0__1VFlE" href="/questions/Loqh-rc9CJiQEfS_EUE6ow/InzxYWdgCbaIpytQEjqxGQ" name="" rel="" role="link" target="">Answer this question</a></span>]
    
    

    编辑:如果上面的代码不起作用,请尝试

    print(yelp_soup.find_all('span', {"class": " text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B"}))
    

    【讨论】:

    • 感谢您的回复。我将您的代码复制/粘贴到我的 jupyter 笔记本中,但最后仍然给我一个空列表。关于如何解决这个问题的任何其他想法?
    • 嗨,在这种情况下,我会直接打印 yelp_soup.prettify() 并在那里找到我想要找到的元素。找到所需元素的类名并仔细检查类名。 (在某些情况下,类名可以不同)
    • 我还在上面的答案中添加了一个编辑,并尝试替代方法是否有效。
    • 感谢您的帮助。我能够通过执行 spans 变量来获取整个跨度数据。我需要再问一个关于如何在展开“显示更多”按钮后获取 标记数据的问题,但我将在另一个线程中执行此操作。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多