首页 > 编程问答 >无法从谷歌浏览器中抓取链接

无法从谷歌浏览器中抓取链接

时间:2024-08-05 16:21:59浏览次数:5  
标签:python html web-scraping hyperlink

我的代码正在打开选项卡,搜索主题并关闭,但它没有向我发送它应该收集的链接。

from selenium import webdriver

pesquisa = input ("o que você quer pesquisar: ")


def get_results(search_term):
    url = "https://www.startpage.com"
    driver = webdriver.Chrome()
    driver.get(url)
    search_box = driver.find_element_by_id("q")
    search_box.send_keys(search_term)
    search_box.submit()
    try:
        links = driver.find_elements_by_xpath("//ol[@class='web_regular_results']//div//a")
    except:
        links = driver.find_elements_by_xpath("//div//a")
    results = []
    for link in links:
        href = link.get_attribute("href")
        print(href)
        results.append(href)
    driver.close()
    return results
    
get_results(pesquisa)


的代码存在几个可能导致其无法正确抓取链接的问题:

  1. 页面加载时间: 的代码可能在页面完全加载并生成搜索结果链接之前就尝试找到它们。这会导致找不到任何链接或找到不完整的链接列表。

  2. 不正确的 XPath: 使用的 XPath 表达式可能无法在 Startpage 的当前 HTML 结构中找到正确的链接元素。网站经常更改其 HTML 结构,这可能会破坏依赖于特定 XPath 的网络抓取工具。

  3. JavaScript 呈现: Startpage 可能正在使用 JavaScript 来动态加载搜索结果。如果的代码仅查看初始 HTML 源代码,它将看不到这些动态加载的链接。

以下是如何解决这些问题的更新代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

pesquisa = input("o que você quer pesquisar: ")


def get_results(search_term):
    url = "https://www.startpage.com"
    driver = webdriver.Chrome()
    driver.get(url)

    # 等待搜索框出现并输入搜索词
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "q"))
    )
    search_box.send_keys(search_term)
    search_box.submit()

    # 等待搜索结果出现
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "web_regular_results"))
    )

    # 提取链接
    links = driver.find_elements_by_xpath("//ol[@class='web_regular_results']//h3/a")
    results = [link.get_attribute("href") for link in links]

    driver.close()
    return results

get_results(pesquisa)

此代码包含以下改进:

  • 显式等待: 使用 WebDriverWait 来等待特定元素(搜索框和搜索结果)在尝试与它们交互之前加载。这确保的代码不会过早地尝试查找元素。
  • 更强大的 XPath: 使用更具体的 XPath 来定位包含结果链接的 <h3> 元素。
  • 更简洁的代码: 使用列表推导来提取和存储链接,从而使代码更简洁易懂。

通过实施这些更改,的代码应该能够更可靠地从 Startpage 中抓取链接。

标签:python,html,web-scraping,hyperlink
From: 67874637

相关文章

  • Python Telegram Bot 从数据库获取数据时出错
    我正在开发用于管理企业用途任务的电报机器人。团队负责人注册他的公司并获得唯一的ID,然后可以分配任务。问题是,当团队负责人分配任务时,他可以使用/viewtasks访问它们。但是,当员工尝试查看任务时,它会打印出“错误。您尚未注册”。似乎无法检索与用户关联的company_id,即使......
  • 在 Glue 作业中使用 python3+ 创建 CloudFront 签名 URL
    是否可以使用python3+为GlueJob中S3文件中的一个特定文件创建具有一定时间限制的CloudFront签名URL?我看到可以在Lambda中做到这一点,但在Python文档中找不到任何内容,特别是胶水工作。任何人都可以提供一些提示吗?defload_private_key(key_path):withopen(......
  • 【Python学习手册(第四版)】学习笔记14-迭代器和列表解析(一)
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。本文主要以通俗易懂的语言介绍迭代器(文件迭代、手动迭代iter和next等),列表解析式包括基础知识包括写法、文件上使用列表解析、扩展列表解析语法等,对列表解析不懂的同学着重推荐......
  • 如何获取部署在 Azure 应用服务上并通过 Microsoft 身份提供商进行身份验证的 Python
    我使用PythonDash包构建了一个Web应用程序,并将该应用程序部署在Azure应用服务上。Web应用程序当前通过Azure门户的应用程序服务使用Microsoft身份提供程序进行身份验证。但是如何获取登录用户的详细信息呢?在本地运行时如何验证我的Web应用程序?我当前的登录流......
  • 使用 Python 打印此图案
    1010101010101010使用python打印此我已经尝试过defprint_pattern(rows):foriinrange(rows):start_char='1'ifi%2==0else'0'pattern=''.join(start_charifj%2==0else('0'ifs......
  • python discord bot nextcord 斜线命令 更改语言
    我想根据用户的不和谐语言更改斜杠命令的名称。如果语言是韩语/서버如果语言是英语/服务器像这样。我可以使用ctx.locale更改里面的内容,但我也想更改名称和描述。我应该怎么办?当我问ChatGPT时,他们说的很奇怪,谷歌上也没有任何信息。但是有一个机器人可以根据语言......
  • 学习Python的书籍推荐--《Python编程从入门到实践》
    版权信息:书名:Python编程:从入门到实践(第3版)作者:[美]埃里克·马瑟斯(EricMatthes)译者:袁国忠评价:1.北京邮电大学副教授陈光老师是这样评价的:    编程教学之道,一是重在实践,二是循序渐进一一通过巧妙的实战项目,激发和保持学习的热情,让学习渐入佳境。在这两方......
  • 我可以将 Python 与 javascript 结合起来用于网站或应用程序吗
    我不知道如果j添加Python和javascript可以吗我尝试过。但决定在继续之前询问一下是否可以继续但是如果我只使用javascript还是只使用python会更好吗?我只需要建议或答案将Python与Javascript结合用于网站或应用程序不仅完全可行,而且也是一种非常常见的做法!二者......
  • Python 网络抓取与请求和美丽的汤被需要 javascript 阻止
    我正在尝试从网站上抓取文本。我使用简单的代码:requests.get(url_here)。我的代码直到最近才有效。现在,当我使用请求时,我收到一条消息,而不是获取网站的文本:“该网站需要启用JavaScript!您使用的浏览器不支持JavaScript,或者已关闭JavaScript。“我已验证我的浏览器确实......
  • python实现局域网及广域网私人聊天(Socket库局域网应用)
    引言在当今这个数字化时代,即时通讯已成为我们日常生活的一部分。无论是通过手机还是电脑,人们都在寻找更高效、更私密的沟通方式。想象一下,在你自己的局域网内,与朋友或同事建立一个专属的聊天室,无需担心数据泄露或者被第三方监听。本文将引导你从零开始,利用Python和Socket库......