【问题标题】:Beautiful Soup not returning anything I expected美丽的汤没有返回我所期望的任何东西
【发布时间】:2020-12-05 15:03:38
【问题描述】:

背景: 接下来是一个 Udemy 教程,该教程正在解析来自 Bing 的一些信息。 它接受用户输入并将其用作搜索 Bing 的参数,返回它可以在第一页上找到的所有 href 链接

代码:

from bs4 import BeautifulSoup
import requests as re

search = input("Enter what you wanna search: \n")
params = {"q": search}
r = re.get("https://www.bing.com/search", params=params)

soup = BeautifulSoup(r.text, 'html.parser')

results = soup.find("ol",{"id":"b_results"})
links = results.findAll("li",{"class": "b_algo"})


for item in links:
    item_text = item.find("a").text
    item_href = item.href("a").attrs["href"]

    if item_text and item_href:
        print(item_text)
        print(item_href)

    else:
        print("Couldn't find 'a' or 'href'")

问题: 它什么也不返回。该代码显然对他有用。我检查了idclass 的名称以查看它们是否在制作视频后在 bing 上发生了更改,但它们仍然相同

"ol",{"id":"b_results"}
"li",{"class": "b_algo"}

有什么想法吗?我完全是网络抓取的菜鸟,但对 Python 来说是中等水平。

提前致谢!

【问题讨论】:

    标签: python web-scraping beautifulsoup find


    【解决方案1】:

    您的代码需要一些修改。

    首先,您需要headers,否则Bing(正确)认为您是机器人并且它不会返回HTML

    然后,您需要检查锚点是否不是None,例如href 中至少有http

    例如:

    from bs4 import BeautifulSoup
    import requests
    
    
    headers = {
        "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36",
    }
    page = requests.get("https://www.bing.com/search?", headers=headers, params={"q": "python"}).text
    soup = BeautifulSoup(page, 'html.parser')
    
    anchors = soup.find_all("a")
    for anchor in anchors:
        if anchor is not None:
            try:
                if "http" in anchor["href"]:
                    print(anchor.getText(), anchor["href"])
            except KeyError:
                continue
    

    输出:

    Welcome to Python.org https://www.python.org/
    Diese Seite übersetzen http://www.microsofttranslator.com/bv.aspx?ref=SERP&br=ro&mkt=de-DE&dl=de&lp=EN_DE&a=https%3a%2f%2fwww.python.org%2f
    Python Downloads https://www.python.org/downloads/
    Windows https://www.python.org/downloads/windows/
    Python for Beginners https://www.python.org/about/gettingstarted/
    About https://www.python.org/about/
    Documentation https://www.python.org/doc/
    Community https://www.python.org/community/
    Success Stories https://www.python.org/success-stories/
    News https://www.python.org/blogs/
    Python (Programmiersprache) – Wikipedia https://de.wikipedia.org/wiki/Python_%28Programmiersprache%29
    Wikipedia https://de.wikipedia.org/wiki/Python_%28Programmiersprache%29
    CC-BY-SA-Lizenz http://creativecommons.org/licenses/by-sa/3.0/
    Python lernen - Python Kurs für Anfänger und Fortgeschrittene https://www.python-lernen.de/
    Python 3.9.0 (64bit) für Windows - Download https://python.de.uptodown.com/windows
    Python-Tutorial: Tutorial für Anfänger und Fortgeschrittene https://www.python-kurs.eu/kurs.php
    Mehr zu python-kurs.eu anzeigen https://www.python-kurs.eu/kurs.php
    Python (Programmiersprache) – Wikipedia https://de.wikipedia.org/wiki/Python_%28Programmiersprache%29
    Python (Programmiersprache) - Wikipedia https://de.wikipedia.org/wiki/Python_%28Programmiersprache%29
    

    对了,这是什么课程,因为抓取搜索引擎并不容易?

    【讨论】:

    • 太棒了。谢谢你解释清楚的回答。机器人预防措施也可以解释为什么我的 selenium 应用程序自动化一些 Facebook 消息也不起作用,所以也许 2 只鸟在这里一块石头! udemy.com/course/python-complete
    【解决方案2】:

    您的脚本运行良好。如果您仔细查看请求的答案(例如,将 r.text 保存到文件中),您会看到答案充满了 javascript。

    按照这个方法,你会看到身体里全是<script>应答器:

    <!DOCTYPE html>
    <body>
    <script>(...)</script>
    <script>(...)</script>
    <script>(...)</script>
    </body>
    </html>
    

    我建议尝试其他网站,或使用 Selenium。 Udemy 真的要求尝试抓取 bing.com 吗?

    【讨论】:

      猜你喜欢
      • 2021-05-02
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多