使用 BeautifulSoup 抓取网页中的链接标题和 URL

2024-04-21

我有一个流行文章的网页,我想抓取每个引用网页的超链接及其所显示文章的标题。

我的脚本所需的输出是一个 CSV 文件,其中在一行中列出了每个标题和文章内容。因此,如果该网页上有 50 篇文章,我想要一个包含 50 行和 100 个数据点的文件。

我的问题是文章标题及其超链接包含在 SVG 容器中,这让我感到困惑。我以前曾使用 BeautifulSoup 进行网页抓取,但不知道如何选择每篇文章的标题和超链接。非常感谢任何和所有的帮助。

import requests 
from bs4 import BeautifulSoup 
import re 

res = requests.get('http://fundersandfounders.com/what-internet-thinks-based-on-media/') 
res.raise_for_status() 
playFile = open('top_articles.html', 'wb') 
for chunk in res.iter_content(100000): 
    playFile.write(chunk) 
    f = open('top_articles.html') 
    soup = BeautifulSoup(f, 'html.parser') 
    links = soup.select('p') #i know this is where i'm messing up, but i'm not sure which selector to actually utilize so I'm using the paragraph selector as a place-holder
    print(links)

我知道这实际上是一个两步项目:我的脚本的当前版本不会迭代我要抓取其实际内容的所有超链接的列表。这是我自己可以轻松执行的第二步,但是如果有人也想写这一点,请向您致敬。


您应该分两步进行:

  • 解析 HTML 并提取指向的链接svg
  • 下载svg页面,解析它BeautifulSoup并提取“气泡”

执行:

from urllib.parse import urljoin  # Python3

import requests
from bs4 import BeautifulSoup


base_url = 'http://fundersandfounders.com/what-internet-thinks-based-on-media/'

with requests.Session() as session:
    # extract the link to svg
    res = session.get(base_url)
    soup = BeautifulSoup(res.content, 'html.parser')
    svg = soup.select_one("object.svg-content")
    svg_link = urljoin(base_url, svg["data"])

    # download and parse svg
    res = session.get(svg_link)
    soup = BeautifulSoup(res.content, 'html.parser')
    for article in soup.select("#bubbles .bgroup"):
        title, resource = [item.get_text(strip=True, separator=" ") for item in article.select("a text")]
        print("Title: '%s'; Resource: '%s'." % (title, resource))

打印文章标题和资源:

Title: 'CNET'; Resource: 'Android Apps That Extend Battery Life'.
Title: '5-Years-Old Shoots Sister'; Resource: 'CNN'.
Title: 'Samsung Galaxy Note II'; Resource: 'Engaget'.
...
Title: 'Predicting If a Couple Stays Together'; Resource: 'The Atlantic Magazine'.
Title: 'Why Doctors Die Differently'; Resource: 'The Wall Street Journal'.
Title: 'The Ideal Nap Length'; Resource: 'Lifehacker'.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 BeautifulSoup 抓取网页中的链接标题和 URL 的相关文章

  • 当选择更改时使用 JQuery 进行检测

    我有一个 Jqgrid 它动态生成这样的选择
  • / __init__() 处的 TypeError 恰好采用 1 个参数(给定 2 个)

    我有点困惑为什么会出现这个错误 我不知道这个额外的参数是从哪里来的 Environment Request Method GET Request URL http 0 0 0 0 5000 Django Version 1 6 4 Pyth
  • 为什么比较匹配的字符串比比较不匹配的字符串更快? [复制]

    这个问题在这里已经有答案了 这里有两个测量值 timeit timeit toto 1234 number 100000000 1 8320042459999968 timeit timeit toto toto number 100000
  • 使用 pandas 插值将每月值转换为每日值

    我有 1000 列的 12 个平均每月值 我想使用 pandas 将数据转换为每日数据 我尝试过使用插但我得到了从 31 01 1991 到 31 12 1991 的每日值 这并不涵盖全年 一月份的值没有得到 我用了日期范围用于我的数据框的
  • 将 PyQt5 QPixmap 转换为 numpy ndarray

    我有像素图 pixmap self screen grabWindow 0 self x self y self width self height 我想将其转换为 OpenCV 格式 我尝试将其转换为numpy ndarray如上所述he
  • 将画布的鼠标坐标转换为地理坐标

    我正在尝试使用 Python Tkinter 创建包含意大利所有城市的地图Canvas 我在网上找到了一张意大利地图的图片 其中突出显示了一些城市 并将其插入到我的Canvas 之后 我使用一个函数来确定 2 个突出显示的城市的画布坐标 i
  • matplotlib 的上限/下限

    我想用误差线绘制一些数据点 其中一些数据点只有上限或下限 而不是误差线 所以我尝试使用索引来区分带有误差条的点和带有上限 下限的点 但是 当我尝试这样的事情时 errorbar x i y i yerr ymin i ymax i 我收到错
  • jsoup 的奇怪编码行为

    我用jsoup从不同页面的html源代码中提取一些信息 大多数都是UTF 8编码的 其中一个是用 ISO 8859 1 编码的 这会导致一个奇怪的错误 在我看来 包含错误的页面是 http www gudi ch armbanduhr me
  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • python seaborn:按色调显示 alpha

    在seaborn中 色调为组设置不同的颜色 我可以设置吗alpha取决于组中的JointGrid 或者甚至在单个数据点上 sns set theme jg sns JointGrid data df sns x x y y hue hue
  • 如何将 tkinter 窗口放在其他窗口之上?

    我正在使用 Python 2Tkinter and PyObjC 然后我用py2app 该程序工作正常 但每当我打开该程序时 该窗口都会以隐藏状态开始 因此直到我单击扩展坞上的图标将其调出时 它才会出现 有什么方法可以控制这个 使窗口位于应
  • 如何在 Python 中从平面列表构建嵌套列表? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个简单的列表 例如 flat 1 1 1 1 1 1 1 2 2 2 1 2 2 3 我需要转换为嵌套列表 其中每个级别 破折号后跟数
  • 当日志在不同进程中发出时,caplog 中的消息为空

    我正在使用 log cli true 运行测试 剧本 import logging import sys from multiprocessing import Process logging basicConfig stream sys
  • 从Python中的URL中提取域[重复]

    这个问题在这里已经有答案了 我有一个像这样的网址 http abc hostname com somethings anything 我想得到 hostname com 我可以使用什么模块来完成此任务 我想在python2中使用相同的模块和
  • 如何防止模块被导入两次?

    在编写python模块时 有没有办法防止它被客户端代码导入两次 就像 c c 头文件一样 ifndef XXX define XXX endif 非常感谢 Python 模块不会被多次导入 仅运行两次 import 不会重新加载模块 如果你
  • Python:定义多个相同类型的变量?

    可能是重复的 但至少我无法通过搜索这些术语找到答案 在Python中有没有更快的方法来做到这一点 level1 level2 level3 我试过了 level1 level2 level3 但这似乎创建了该对象的副本 这不是我想要的 和
  • 在 Django 查询中与父级一起获取子级数据

    我有两个模型产品和产品包 产品包有一个产品型号的外键 我如何访问包含产品包的所有产品的列表 class Product models Model title models CharField verbose name Product Tit
  • 在 Pandas 中按索引分组

    如何使用 groupby by 索引 1 2 3 它们的顺序相同 并获得属于每个索引范围的列分数的总和 基本上我有这个 index score 1 2 2 2 3 2 1 3 2 3 3 3 我想要的是 index score sum 1
  • AttributeError:“MainRouter”对象没有属性“_disabled_count”

    我正在创建一个 kivy 应用程序 其中我使用了显示此错误的路由器 AttributeError MainRouter 对象没有属性 disabled count 有什么解决办法吗 我也得到了这个 但使用 super 修复了它 使用以下命令
  • 在 Bootstrap 导航栏后添加一些空间的最佳方法是什么?

    以下代码始终在页面顶部显示导航栏 我需要将第二个容器 内容 放置在导航栏的末尾而不是其下方 目前第二个容器位于导航栏下方 我可以在内容顶部添加一些空白 但我不确定这是一个好方法 知道如何解决吗 div class container div

随机推荐

  • 将多个 Word 文档合并为一个 Open Xml

    我有大约 10 个 word 文档 它们是使用 open xml 和其他东西生成的 现在我想创建另一个word文档 我想将它们逐一加入到这个新创建的文档中 我希望使用 open xml 任何提示都会很有意义 下面是我的代码 private
  • npm start 如何在端口 8000 上运行服务器

    我最近使用 github 上的 Angular Seed 文件夹进行 Angular 应用程序开发 在之前的一些 AngularJS 教程中 Angular Seed 文件夹中有一个脚本文件夹和一个 server js 文件 其中包含运行节
  • 是否可以将 UIView 的顶部固定到导航栏的底部?

    我试图将 UIView 定位在导航栏下方 20pt 但是当我相对于视图控制器上的视图设置它时 它仍然位于导航栏下方 20pt 并且我不想对其进行硬编码 是否可以将其放置在远离导航栏的位置 要以编程方式执行此操作 请使用topLayoutGu
  • Powershell 以块的形式读取文件

    我有一个用 Powershell 编写的脚本 它通过 FTP 传输文件 使用以下命令可以正常工作 content System IO File ReadAllBytes backup app data 但是 一旦文件大小达到 2Gb 此方法
  • 标题正确,但 Chrome 显示“资源解释为文档”

    我读了很多这样的问题 但我真的无法弄清楚 我用archiver https www npmjs com package archiver and express https www npmjs com package expressNode
  • 如果电子邮件/密码输入错误,无法显示错误消息

    如果电子邮件 密码输入错误 我希望出现一个消息框 我正在使用 else 语句 但如果登录不正确 它不会显示消息 MyConn New OleDbConnection MyConn ConnectionString connString My
  • 删除 ThreadPoolExecutor 的所有排队任务

    我有一个相当简单的问题线程池执行器 http java sun com javase 6 docs api java util concurrent ThreadPoolExecutor html 我遇到以下情况 我必须使用队列中的对象 为
  • DynamoDB:键及其含义

    我对如何使用 DynamoDB 表键感到困惑 该文档提到了 HASH 似乎也称为分区 键和 RANGE 或排序 键 我试图将这些与我之前对数据库索引理论的理解大致保持一致 我目前主要基于猜测的理解是 HASH 键本质上是主键 它必须是唯一的
  • Spring 部分更新对象数据绑定

    我们正在尝试在 Spring 3 2 中实现一个特殊的部分更新功能 我们使用 Spring 作为后端 并有一个简单的 Javascript 前端 我无法找到满足我们要求的直接解决方案 即update 函数应该接受任意数量的 field va
  • 我可以在乳胶文档的标题中使用 knitr 内联表达式吗?

    我想使用 Knit Sweave 内联调用 Sexpr 在 LaTeX 文档的标题中 在 begin document 命令之后但在 maketitle 命令之前 内联 R 代码将从我嵌入 LaTeX 的 R 脚本早期创建的 R 数据帧中提
  • sqlite只支持1笔交易?

    在使用 ADO NET 时 也许我错了 我不知道它叫什么 我注意到我只能通过连接开始事务 并且命令似乎有 command Transaction 获取事务数据但不启动事务本身 实际上 在查看时我在 System Data SQLite 中看
  • typeid 运算符的奇怪行为?

    使用 XCode 3 2 3 64 位 我得到以下奇怪的输出 我究竟做错了什么 include
  • Willpopscope 无法在 Web 上拦截浏览器后退按钮

    我尝试过拦截网络上的后退按钮 但它不会被触发 我怎样才能让它发挥作用 WillPopScope onWillPop print will pop on web Get offNamed orders return new Future gt
  • grunt-wiredep 对具有不同依赖关系的多个文件

    目前的项目结构有点像这样 index html bower json bower components 建议的项目结构将在项目根目录中添加更多静态 html 文件 到目前为止 我一直在管理 Bower json 中的所有前端依赖项 并使用
  • 在多个自定义模块支持的多个脚本中使用 python 的 argparse

    我正在构建一组用于管理我们的基础设施的脚本和模块 为了让事情井井有条 我想整合尽可能多的努力 并尽量减少新脚本的样板代码 特别是这里的问题是整合 ArgumentParser 模块 一个示例结构是让脚本和库组织如下 bin script1
  • 如何在 C++ 中调用不同项目的方法?

    使用 Visual Studio 时 我通常使用 C 工作 因此 C 中的某些内容让我感到困惑 概念看起来如此不同 但名称几乎相同 我创建了一个控制台项目 我想在其中运行另一个项目以进行测试 我将该项目添加为控制台应用程序的引用 然后陷入困
  • 如何将图像文件从文档目录上传到iphone中的php服务器

    我目前正在开发画廊类的 iPhone 应用程序 根据我的要求 我需要将所有相机捕获的图像存储到文档目录中 文档文件夹中有一些 10 20 个图像文件 之后我必须使用单个 php url 将应用程序资源文档文件夹推送到服务器上 我已附加屏幕截
  • C# 中的省略号表示法?

    我在哪里可以获得有关实现我自己的带有省略号符号的方法的信息 e g static void my printf char format 这也是所谓的省略符号还是有一个更奇特的名字 看看参数关键字 https learn microsoft
  • 多边形来自折线?

    我正在尝试自动从折线创建多边形 到目前为止 我一直在正确计算折线每个部分的外推边 条件 基线和边之间的距离是常数 如何从基点 红色点 计算边 蓝色点 的角点 这是我在 Qt 中的代码 这对我来说很好用 QPolygonF projectPL
  • 使用 BeautifulSoup 抓取网页中的链接标题和 URL

    我有一个流行文章的网页 我想抓取每个引用网页的超链接及其所显示文章的标题 我的脚本所需的输出是一个 CSV 文件 其中在一行中列出了每个标题和文章内容 因此 如果该网页上有 50 篇文章 我想要一个包含 50 行和 100 个数据点的文件