使用python和beautifulsoup对谷歌广告进行网页抓取

使用python和beautifulsoup对谷歌广告进行网页抓取,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正试图从谷歌搜索结果中抓取正确的广告,即从搜索结果中抓取谷歌广告链接。 我有下面的脚本,在这里我被困在汤。选择步骤。我不确定要使用哪些选择器。。。任何帮助都要提前感谢 检查以下元件: ! 蟒蛇3 !usr/bin/env蟒蛇3 导入请求、bs4、webbrowser 获取谷歌搜索结果 ui\u search=inputSearch谷歌: 打印“谷歌搜索…”在下载时显示文本 如果lenui_搜索>1: res=请求。获取'https://google.com/search?q=“+”.joi

我正试图从谷歌搜索结果中抓取正确的广告,即从搜索结果中抓取谷歌广告链接。 我有下面的脚本,在这里我被困在汤。选择步骤。我不确定要使用哪些选择器。。。任何帮助都要提前感谢 检查以下元件:

! 蟒蛇3 !usr/bin/env蟒蛇3 导入请求、bs4、webbrowser 获取谷歌搜索结果 ui\u search=inputSearch谷歌: 打印“谷歌搜索…”在下载时显示文本 如果lenui_搜索>1: res=请求。获取'https://google.com/search?q=“+”.joinui_搜索 res.raise_为_状态 使用ads检索结果并打开它们。 soup=bs4.BeautifulSoupres.text,“html.parser” 为每个结果打开浏览器选项卡 linkElems=soup。选择“.V0MxL a” linkElems2=soup.select'.ad_cclk a' numOpen=min5,lenlinkElems 版画 对于我在rangenumOpen: printlinkElems[i]。获取'href'
webbrowser.打开'http://google.com'+linkElems[i].get'href'对于这种特殊情况,我宁愿使用findAll/find_all方法,因为这样我可以更具体地告诉bs4选择一个包含特定类的标记,我可以在其中获取广告链接URL

只有当谷歌在脚本运行时显示这些广告时,这才有效

代码和:

输出:

https://www.googleadservices.com/pagead/aclk?sa=l&ai=DChcSEwils83_1PrvAhUNjsgKHdWRC7sYABAFGgJxdQ&sig=AOD64_39ASmacGcHYwy9gGKmKFRuPLiOQg&ctype=5&q=&ved=2ahUKEwinrcf_1PrvAhWFKs0KHZzNCsMQww96BAgCED0&adurl= https://www.googleadservices.com/pagead/aclk?sa=l&ai=DChcSEwils83_1PrvAhUNjsgKHdWRC7sYABADGgJxdQ&sig=AOD64_2rqOA3PxFKKsigRh1yy3z5QKbtcw&ctype=5&q=&ved=2ahUKEwinrcf_1PrvAhWFKs0KHZzNCsMQww96BAgCEEk&adurl= https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwils83_1PrvAhUNjsgKHdWRC7sYABAEGgJxdQ&sig=AOD64_0WuY3UDlgTziPk9nUw0f8s3zW3nA&ctype=5&q=&ved=2ahUKEwinrcf_1PrvAhWFKs0KHZzNCsMQww96BAgCEFU&adurl= 或者,您也可以使用SerpApi。这是一个免费试用的付费API。看看这个游戏

要集成的代码:

import os
from serpapi import GoogleSearch

params = {
  "engine": "google",
  "q": "graphic card buy",
  "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

for ads in results["shopping_results"]:
   print(f"Ad link: {ads['link']}")
JSON输出的一部分:

购物结果:[ { 职位:1,, 块位置:顶部, 标题:MSI GeForce GTX 1050 Ti DirectX 12 GTX 1050 Ti GAMING X 4G 4G 4GB 128位GDDR5 PCI Express 3.0 x16 HDCP就绪ATX视频卡, 价格:$378.96, 价格:378.96, 链接:https://www.google.com/aclk?sa=l&ai=DChcSEwiSrfjp0_rvAhUPwMgKHSkHDA8YABAFGgJxdQ&sig=AOD64_0JBh0DChYqoc9ZOWb2n74I16DHbQ&ctype=5&q=&ved=2ahUKEwjFuvDp0_rvAhVLX60KHS1kB9sQ5bgDegQIARA9&adurl=, 来源:Newegg.com, 评级:4.7, 评论:1000篇, 缩略图:https://serpapi.com/searches/60754272d036a77fb9aba998/images/948de68641995317c7afd6bdf3a72f7a9d55cad671345a21921df988b8b9ef6c.png } ] 免责声明,我为SerpApi工作


欢迎来到SO。请花时间阅读stackoverflow.com/help/how-to-ask。它将帮助你设计出可靠的问题,希望能得到有用的答案。请不要截图。请提供一些带有预期返回值的示例链接,如上所述:请不要发布代码图像。使用代码段工具via插入我们可以用于测试的html。@QHarr,谢谢你的提示。我使用了参数,似乎找不到代码段工具。在任何谷歌搜索中,预期结果都是前5个或更少的广告链接。我将添加一个代码示例,显示所有前5次搜索的链接(有和没有广告)。@QHarr找到了snippet工具,但没有python?snippet工具的规范(如果用于添加html/js)。要插入python代码,请将python粘贴到问题中,选择所有python代码,然后按Ctrl+K键。它将所有代码缩进4个空格,然后将其放在代码标记之间。
import os
from serpapi import GoogleSearch

params = {
  "engine": "google",
  "q": "graphic card buy",
  "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

for ads in results["shopping_results"]:
   print(f"Ad link: {ads['link']}")