在 Python 中使用 Selenium 进行导航并使用 BeautifulSoup 进行抓取

2024-04-21

好的,这就是我想要实现的目标:

  1. 调用带有动态过滤搜索结果列表的 URL
  2. 点击第一个搜索结果(5/页)
  3. 抓取标题、段落和图像,并将它们作为 json 对象存储在单独的文件中,例如

    {
    "Title": "单个条目的标题元素",
    "Content" : "各个条目的 DOM 顺序中的段落和图像"
    }

  4. 导航回搜索结果概述页面并重复步骤 2 - 3

  5. 抓取 5/5 结果后,转到下一页(单击分页链接)
  6. 重复步骤 2 - 5,直到没有留下任何条目

To visualize once more what is intedned: enter image description here

到目前为止我所拥有的是:

#import libraries
from selenium import webdriver
from bs4 import BeautfifulSoup

#URL
url = "https://URL.com"

#Create a browser session
driver = webdriver.Chrome("PATH TO chromedriver.exe")
driver.implicitly_wait(30)
driver.get(url)

#click consent btn on destination URL ( overlays rest of the content )
python_consentButton = driver.find_element_by_id('acceptAllCookies')
python_consentButton.click() #click cookie consent btn

#Seleium hands the page source to Beautiful Soup
soup_results_overview = BeautifulSoup(driver.page_source, 'lxml')


for link in soup_results_overview.findAll("a", class_="searchResults__detail"):

  #Selenium visits each Search Result Page
  searchResult = driver.find_element_by_class_name('searchResults__detail')
  searchResult.click() #click Search Result

  #Ask Selenium to go back to the search results overview page
  driver.back()

#Tell Selenium to click paginate "next" link 
#probably needs to be in a sourounding for loop?
paginate = driver.find_element_by_class_name('pagination-link-next')
paginate.click() #click paginate next

driver.quit()

Problem
每次 Selenium 导航回搜索结果概述页面时,列表计数都会重置 所以它点击第一个条目 5 次,导航到接下来的 5 个项目并停止

这可能是递归方法的预定情况,但不确定。

任何有关如何解决此问题的建议都将受到赞赏。


您只能使用requests and BeautifulSoup刮,不含硒。它会更快并且消耗更少的资源:

import json
import requests
from bs4 import BeautifulSoup

# Get 1000 results
params = {"$filter": "TemplateName eq 'Application Article'", "$orderby": "ArticleDate desc", "$top": "1000",
          "$inlinecount": "allpages", }
response = requests.get("https://www.cst.com/odata/Articles", params=params).json()

# iterate 1000 results
articles = response["value"]
for article in articles:
    article_json = {}
    article_content = []

    # title of article
    article_title = article["Title"]
    # article url
    article_url = str(article["Url"]).split("|")[1]
    print(article_title)

    # request article page and parse it
    article_page = requests.get(article_url).text
    page = BeautifulSoup(article_page, "html.parser")

    # get header
    header = page.select_one("h1.head--bordered").text
    article_json["Title"] = str(header).strip()
    # get body content with images links and descriptions
    content = page.select("section.content p, section.content img, section.content span.imageDescription, "
                          "section.content  em")
    # collect content to json format
    for x in content:
        if x.name == "img":
            article_content.append("https://cst.com/solutions/article/" + x.attrs["src"])
        else:
            article_content.append(x.text)

    article_json["Content"] = article_content

    # write to json file
    with open(f"{article_json['Title']}.json", 'w') as to_json_file:
         to_json_file.write(json.dumps(article_json))

  print("the end")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中使用 Selenium 进行导航并使用 BeautifulSoup 进行抓取 的相关文章

随机推荐

  • sql server中的小数点四舍五入

    SQL Server 2008 是否可以向下舍入 例如 96855四舍五入为 968 IE 最多 0 96899 我想通过避免休息来舍入 0 96899 SELECT round 0 96855 3 1 gt 0 96800 对于 0 96
  • 经典的 asp/asp.net 网站 - global.asa 不工作

    最近我得到了一个用经典 ASP 编写的网站来配置和设置 尽管它似乎也有用 ASP NET 编写的页面 我目前遇到的问题是它似乎没有从 global asa 文件中获取设置 例如 Application ConnectionString 当我
  • Bash 颜色可变输出

    我有一个变量 比方说 x它的值是website com 我希望能够调用该变量并向其应用外壳颜色 如下所示 echo e 033 1 32m x 033 0m 问题不在于颜色 而在于脚本解释输出的方式 所以我得到的输出是 x 我需要输出显然是
  • 等待 Swift 中的异步操作完成

    我不知道如何处理这种情况 因为我对 iOS 开发和 Swift 非常陌生 我正在像这样执行数据获取 func application application UIApplication performFetchWithCompletionH
  • 升级到 AnonymousTraversalSource (Gremlin 3.3.5+ Node.js)

    我正在 Lambda Nodejs12 x 中编写代码 我想更新到未弃用的连接方式 const gremlin require gremlin const DriverRemoteConnection gremlin driver Driv
  • Android - 在 AsyncTask 中执行后

    我目前有一个asyncTask在预执行时启动一个加载栏 在后台向服务器发送一些内容 在执行后关闭对话框并启用一个按钮 但是 由于 doInBackground 返回 null 我的后执行未执行 我试图弄清楚我能做些什么来让 postExec
  • 如何使用 python_dateutil 1.5 'parse' 函数来处理 unicode?

    我需要 Python dateutil 1 5parse http labix org python dateutil head a23e8ae0a661d77b89dfb3476f85b26f0b30349c使用 Unicode 月份名称
  • 使用 Java 将包含 XML 的字符串添加到 SOAPElement

    我必须将 Excel 文件中的数据作为 XML 发送到 Web 服务 表中的数据看起来有点像这样 请参阅此处的表格示例 https i stack imgur com NEOTi png 第一行始终包含该列数据的 XML 标记 大多数数据列
  • 从intellij-idea将代码样式格式化设置导入到eclipse中

    我最近实现了将 maven Check 样式插入到我的项目中 并更改了 intellij 我使用的 中的所有格式化程序设置 以符合此样式指南 他们现在这样做 不过 我需要为 eclipse 生成一个设置 xml 文件 以便我的同事可以自动格
  • ld:警告:__DATA/__objc_imageinfo__DATA 节的大小意外地大

    有谁知道这个警告是什么意思 接下来是错误 Command Developer Platforms iPhoneSimulator platform Developer usr bin llvm gcc 4 2 failed with exi
  • 如何在嵌入式Linux中高效地在VFAT分区上创建大文件

    我正在尝试在嵌入式 Linux 盒子中使用 dd 命令在 VFAT 分区上创建一个大的空文件 dd if dev zero of mnt flash file bs 1M count 1 seek 1023 目的是跳过前 1023 个块并在
  • Nginx no-www 到 www 以及 www 到 no-www

    我在用按照教程在 Rackspace 云上安装 nginx http www howtoforge com running phpmyadmin on nginx lemp on debian squeeze ubuntu 11 04并在网
  • 无法使用 Leiningen 构建 jar

    我正在尝试使用 Intellij 的 Cursive 中的 Leiningen 插件从我的基本 Clojure 项目中制作一个独立的 jar 为了创建项目 我刚刚创建了 project clj 文件 将其打开 Cursive 提出将其导入为
  • Heroku SSL 与 Route53

    我的 SSL 证书已全部设置完毕并准备好在 Heroku 上运行 我按照这里的说明进行操作https devcenter heroku com articles route 53 https devcenter heroku com art
  • Python 子进程调用不能采用 grep [重复]

    这个问题在这里已经有答案了 Python 子进程调用应该按原样作为命令运行 但如果其中有管道 它就会抱怨 这是我的代码 usr bin python import sys import subprocess import time serv
  • 如何在预构建步骤中转义美元符号

    我正在与 Visual Studio 进行斗争 以在预构建步骤中正确转义美元符号 目标是提供一个变量名作为文字 VS 不应该尝试处理变量名 The 文档 https msdn microsoft com en us library bb38
  • Angular 子路由不起作用并将我重定向到同一页面

    我尝试过改变我的route到目前为止我没有发现任何问题 但是 如果您发现任何缺陷 请告诉我 我也会尝试查找任何类型错误并仔细检查我的组件 到目前为止我还没有找到 但请再次告诉我 我尝试输入我的路线 URL 它可以工作 但显示的是相同的页面
  • 使用 Jackson JsonFormat 模式自定义日期字符串

    Summary 我正在尝试解析日期 例如25 Sep 17因此简单日期格式 https docs oracle com javase 8 docs api java text SimpleDateFormat html注释似乎是 JsonF
  • 将标头附加到 Rspec 控制器测试

    我正在尝试为我的控制器编写测试 该控制器接收来自外部服务的请求 到目前为止 这是我的测试 describe ApplyController do context when valid do let parameters do file Fi
  • 在 Python 中使用 Selenium 进行导航并使用 BeautifulSoup 进行抓取

    好的 这就是我想要实现的目标 调用带有动态过滤搜索结果列表的 URL 点击第一个搜索结果 5 页 抓取标题 段落和图像 并将它们作为 json 对象存储在单独的文件中 例如 Title 单个条目的标题元素 Content 各个条目的 DOM