【问题标题】:What is the Alternative to a Selenium Bot Written in Python?用 Python 编写的 Selenium Bot 的替代方案是什么?
【发布时间】:2020-12-11 08:32:38
【问题描述】:

我已经完成了一个基本的网络抓取机器人的构建,它可以在我想要的网站上执行任务。完成后,我意识到 selenium 解析 Web 数据的速度非常慢,而且较大的任务可能需要几分钟或更长时间才能执行。本质上,我在网站上的基本机器人搜索然后解析不同的文章并记录结果。我的机器人是用 Python 3 编写的,它导入了 selenium webdriver。任务的范围包括单击搜索栏、输入内容、输入、然后查找热门文章并记录它们。我想将其推进到与文章互动和与文章作者交流,每个任务联系 5-10 人。我在 theverge.com 上做过,但这只是一个测试网站,不是真正的交易。

我听说过向 URL 发送 GET 请求并向 URL 添加搜索查询,然后解析响应。但是,我不确定如何做到这一点,任何对此的参考都会很好地让我朝着正确的方向前进。我也在考虑将 Node 用于繁重的 JavaScript 网站,并使用 puppeteer 来加载和解析动态网页。

感谢任何可以为我指明正确方向的提示或建议

我的代码供参考除外

driver.get("https://www.theverge.com/")
print(driver.title)

search_button = driver.find_elements_by_id("icon-search")

search = driver.find_element_by_name("q")
search.send_keys("facebook")
search.send_keys(Keys.RETURN)

try:
    element = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.LINK_TEXT, "Facebook’s old web design will disappear in September")))
    element.click()

except:
    driver.quit()

【问题讨论】:

  • 搜索模块 requestsurllib 从服务器获取 HTML 并稍后发送表单数据,模块 BeautifulSouplxml 解析 HTML 并搜索 HTML 中的数据。但这不会运行 JavaScript,如果您有带有 JavaScript 的页面,那么您仍然可能需要 Selenium 但您可以尝试在不显示窗口的情况下运行 - 在 headless 模式下。

标签: python selenium webdriver bots puppeteer


【解决方案1】:

使用 urllib/urllib3(分别用于 Python 2 或 3)、requestsBeautifulSoup4。 您正在做太多的工作来获得所需的搜索。这足以获得第一个链接。

import requests, urllib3
from bs4 import BeautifulSoup

link = "https://www.theverge.com/search?q=facebook"

session = requests.Session()
url = session.get(link).text

soup = BeautifulSoup(url,'lxml')
titles = soup.select('.c-entry-box--compact__title > a')

for title in titles:
    if title.has_attr('href'):
        print(title.attrs['href'])
        break

使用Requests-HTML,可用于Javascript网站。

【讨论】:

  • Request-HTML 完整的 javascript 支持,谢谢!
猜你喜欢
  • 2017-05-10
  • 2023-01-19
  • 1970-01-01
  • 2022-11-23
  • 2011-04-07
  • 2021-11-13
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多