Python BeautifulSoup&&请求搜索引擎

时间:2016-07-01 03:11:03

标签: python web-scraping beautifulsoup python-requests

我对如何做到这一点感到有些困惑。我不确定这是否正确,但我正在尝试通过网址查询搜索。我试过这样做:

url = 'https://duckduckgo.com/dogs?ia=meanings'
session = requests.session()
r = session.get(url)
soup = bs(r.content, 'html.parser')

我从回复中得到了一些html;但是,当我查找所有链接时,它除了原始搜索网址之外什么都没有。

links = soup.find_all('a')
for link in links:
    print(link)

<a href="https://duckduckgo.com/html/?q=dogs">here</a>

当我在浏览器上进行搜索并检查html代码时,所有链接都存在,但出于某种原因不会通过我的请求回复给我。

任何人都有任何想法,我正在尝试构建一个网络抓取应用程序,我认为这将是非常容易的,我可以纳入我的终端。

1 个答案:

答案 0 :(得分:3)

问题是搜索结果和大部分页面是动态加载,借助浏览器执行的JavaScript代码。 requests只会下载初始的静态HTML页面,它没有JS引擎,因为它不是浏览器。

您基本上有3个主要选项:

  • 使用DuckDuckGo API(Python wrapper,可能有更好的一个 - 请重新检查) - 此选项是首选
  • 通过selenium在真实浏览器中加载页面,然后解析现在与您在浏览器中看到的完整HTML相同的HTML
  • 尝试探索加载页面的请求,并在BeautifulSoup + requests代码中模仿它们。这是最难和最脆弱的方法,可能涉及复杂的逻辑和JavaScript代码解析。