我对如何做到这一点感到有些困惑。我不确定这是否正确,但我正在尝试通过网址查询搜索。我试过这样做:
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代码时,所有链接都存在,但出于某种原因不会通过我的请求回复给我。
任何人都有任何想法,我正在尝试构建一个网络抓取应用程序,我认为这将是非常容易的,我可以纳入我的终端。
答案 0 :(得分:3)
问题是搜索结果和大部分页面是动态加载,借助浏览器执行的JavaScript代码。 requests
只会下载初始的静态HTML页面,它没有JS引擎,因为它不是浏览器。
您基本上有3个主要选项:
DuckDuckGo
API(Python wrapper,可能有更好的一个 - 请重新检查) - 此选项是首选selenium
在真实浏览器中加载页面,然后解析现在与您在浏览器中看到的完整HTML相同的HTML BeautifulSoup
+ requests
代码中模仿它们。这是最难和最脆弱的方法,可能涉及复杂的逻辑和JavaScript代码解析。