首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Web-scraping Rvest -如何从缩短的URL中捕获完整的‘href` url

Web scraping 是一种从网站中提取数据的自动化过程。Rvest 是一个流行的 R 语言包,用于网页抓取和数据提取。当你遇到缩短的 URL 时,通常需要先获取其重定向后的完整 URL 才能进一步提取 href 属性。

基础概念

  1. 缩短的 URL:这些是通过服务如 bit.ly 或 tinyurl.com 创建的,目的是为了简化长 URL 的分享。
  2. 重定向:当访问缩短的 URL 时,服务器会自动将浏览器重定向到原始的长 URL。
  3. Rvest:一个 R 语言包,用于网页抓取和数据提取。

相关优势

  • 自动化:减少手动复制粘贴数据的工作量。
  • 效率:可以快速处理大量数据。
  • 灵活性:可以针对不同的网站结构定制抓取策略。

类型与应用场景

  • 类型:静态网页抓取、动态网页抓取(需要处理 JavaScript)。
  • 应用场景:市场分析、竞争对手监控、数据挖掘、新闻聚合等。

解决问题的步骤

  1. 获取重定向后的 URL:使用 R 中的 httr 包来跟踪重定向。
  2. 使用 Rvest 提取 href 属性:一旦有了完整的 URL,就可以使用 Rvest 来提取所需的链接。

示例代码

以下是一个示例代码,展示了如何从缩短的 URL 中捕获完整的 href URL:

代码语言:txt
复制
# 安装并加载必要的包
install.packages("rvest")
install.packages("httr")
library(rvest)
library(httr)

# 缩短的 URL 示例
short_url <- "http://bit.ly/3jZ4QZ9"

# 使用 httr 获取重定向后的完整 URL
response <- GET(short_url)
full_url <- content(response, "text")

# 使用 Rvest 从完整 URL 的页面中提取 href 属性
page <- read_html(full_url)
links <- page %>% html_nodes("a") %>% html_attr("href")

# 打印提取到的链接
print(links)

解释

  1. 获取重定向后的 URL
    • GET(short_url) 发送 HTTP GET 请求到缩短的 URL。
    • content(response, "text") 获取最终重定向页面的 HTML 内容。
  • 提取 href 属性
    • read_html(full_url) 将 HTML 内容解析为 Rvest 可以操作的格式。
    • html_nodes("a") 找到所有的 <a> 标签。
    • html_attr("href") 提取这些标签的 href 属性。

注意事项

  • 合法性:确保你的抓取行为符合目标网站的 robots.txt 文件规定,并且不违反任何法律法规。
  • 频率控制:避免频繁请求,以免对目标网站造成负担或被封禁。

通过上述步骤和代码,你可以有效地从缩短的 URL 中捕获完整的 href URL,并进行进一步的数据提取工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何从 100 亿 URL 中找出相同的 URL?

对于这种类型的题目,一般采用分治策略 ,即:把一个文件中的 URL 按照某个特征划分为多个小文件,使得每个小文件大小不超过 4G,这样就可以把这个小文件读到内存中进行处理了。...使用同样的方法遍历文件 b,把文件 b 中的 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同的 URL 都在对应的小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应的小文件不可能有相同的 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同的 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同的 URL,可以把这个 URL 保存到一个单独的文件中。

2.9K30

面试:如何从 100 亿 URL 中找出相同的 URL?

对于这种类型的题目,一般采用分治策略 ,即:把一个文件中的 URL 按照某个特征划分为多个小文件,使得每个小文件大小不超过 4G,这样就可以把这个小文件读到内存中进行处理了。...使用同样的方法遍历文件 b,把文件 b 中的 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同的 URL 都在对应的小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应的小文件不可能有相同的 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同的 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同的 URL,可以把这个 URL 保存到一个单独的文件中。

4.6K10
  • 面试:如何从 100 亿 URL 中找出相同的 URL?

    对于这种类型的题目,一般采用分治策略 ,即:把一个文件中的 URL 按照某个特征划分为多个小文件,使得每个小文件大小不超过 4G,这样就可以把这个小文件读到内存中进行处理了。...使用同样的方法遍历文件 b,把文件 b 中的 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同的 URL 都在对应的小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应的小文件不可能有相同的 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同的 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同的 URL,可以把这个 URL 保存到一个单独的文件中。

    2.3K20

    面试经历:如何从 100 亿 URL 中找出相同的 URL?

    对于这种类型的题目,一般采用分治策略 ,即:把一个文件中的 URL 按照某个特征划分为多个小文件,使得每个小文件大小不超过 4G,这样就可以把这个小文件读到内存中进行处理了。...使用同样的方法遍历文件 b,把文件 b 中的 URL 分别存储到文件 b0, b1, b2, ..., b999 中。...这样处理过后,所有可能相同的 URL 都在对应的小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应的小文件不可能有相同的 URL。...那么接下来,我们只需要求出这 1000 对小文件中相同的 URL 就好了。 接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。...然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同的 URL,可以把这个 URL 保存到一个单独的文件中。

    1.9K00

    从输入URL到渲染的完整过程1

    跨域解决方法1-代理对于前端开发而言,大部分的跨域问题,都是通过代理解决的代理适用的场景是:生产环境不发生跨域,但开发环境发生跨域因此,只需要在开发环境使用代理解决跨域即可,这种代理又称之为开发代理图片在实际开发中...服务器拿到请求后,响应一段JS代码,这段代码实际上是一个函数调用,调用的是客户端预先生成好的函数,并把浏览器需要的数据作为参数传递到函数中,从而间接的把数据传递给客户端图片JSONP有着明显的缺点,即其只能支持...,请求中不包含我们的请求头,也没有消息体。...:后续的真实请求将使用的请求方法Access-Control-Request-Headers:后续的真实请求会改动的请求头服务器允许服务器收到预检请求后,可以检查预检请求中包含的信息,如果允许这样的请求...();xhr.withCredentials = true;// fetch apifetch(url, { credentials: 'include',});这样一来,该跨域的 ajax 请求就是一个附带身份凭证的请求当一个请求需要附带

    66840

    如何修改Laravel中url()函数生成URL的根地址

    前言 本文主要给大家介绍了修改Laravel中url()函数生成URL的根地址的相关内容,相信大家都晓得 Larevel 的一票帮助函数中有个 url(),可以通过给予的目录生成完整的 URL,是非常方便的一个函数...: // return: url('user/profile') 但是这玩意生成的 URL 中要补完的部分是框架内部根据 Request 自动判断的,而自动判断出的东西有时候会出错(譬如在套了一层反向代理之类的情况下...文档上并没有提到我们要如何才能自定义它生成的 URL 中的根地址和协议头部分(http(s)),这就非常吃瘪了。那我们要咋办呢?...return $url; }); } 这也就意味着我们可以随时通过 url 这个 abstract 来访问服务容器中的这个 UrlGenerator,并且修改它。...修改 url() 函数生成的 URL 中的根地址的代码如下: // 用它提供的方法检测 URL 是否有效 if (app('url')->isValidUrl($rootUrl)) { app('url

    3.4K30

    如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?

    使用场景 假设遇到这样一个问题:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?...若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。...比如:某个URL(X)的哈希是2,那么落到这个byte数组在第二位上就是1,这个byte数组将是:000….00000010,重复的,将这20亿个数全部哈希并落到byte数组中。...但是如果这个byte数组上的第二位是0,那么这个URL(X)就一定不存在集合中。...多次哈希: 为了减少因哈希碰撞导致的误判概率,可以对这个URL(X)用不同的哈希算法进行N次哈希,得出N个哈希值,落到这个byte数组上,如果这N个位置没有都为1,那么这个URL(X)就一定不存在集合中

    1.8K30

    如何使用Shortemall自动扫描URL短链接中的隐藏内容

    Shortemall的全名为Short'Em All,该工具能够自动扫描目标URL短链接,并使用了多种技术来收集与目标URL短链接相关的各种信息,例如登录页截图、检查URL地址是否存在、根据用户偏好过滤结果等...; 5、扫描指定的URL短链接提供方:用户可以扫描指定的URL短链接提供商,增强了分析的灵活性和有效性; 6、自动化配置以提升用户体验:工具提供了自动化配置选项来安装和配置工具,以实现最佳性能; 7、屏幕截图管理提升...Python和pip至少为v3.8版本; 2、该工具当前仅支持在Linux或Linux虚拟机中运行; 3、你需要获取Gmail账号的OAuth 2.0客户端ID,并将其存储在项目根目录的credentials.json...文件中【#zippy=】; 4、编辑config.py文件并设置好my_email和to_email等变量; 5、首次运行工具之后,确保当前工作目录中已经生成了必要的配置文件,例如config.ini和...任务运行完成后,可以在Output和Screenshots目录中查看到工具的运行结果。

    11910

    从输入URL到渲染的过程中到底发生了什么?

    CDN缓存DNSTCP三次握手、四次挥手浏览器渲染过程输入URL到页面渲染过程的一些优化下面我将“从输入URL到渲染的全过程”大概的描述出来,再对其过程加以解释,了解过程中可以做哪些优化。...undefined(4)、当客户端DNS缓存(浏览器和操作系统)缓存为空时,DNS查找的数量与要加载的Web页面中唯一主机名的数量相同,包括页面URL、脚本、样式表、图片、Flash对象等的主机名。...减少主机名的数量就可以减少DNS查找的数量;undefined(5)、减少唯一主机名的数量会潜在减少页面中并行下载的数量(HTTP1.1规范建议从每个主机名并行下载两个组件,但实际上可以多个);但是减少主机名和并行下载的方案会产生矛盾...选择的依据:用户的ip地址,判断哪台服务器距离用户最近,根据用户请求的url中携带的内容名称判断哪台服务器上有用户要的数据,查询各个服务器当前负载情况,判断哪台服务器有服务能力。...避免使用table布局和使用css的js表达式 结语通过阅读本文,相信小伙伴们对从输入URL到页面渲染的过程有了一个大概的理解。

    1.6K40

    如何将finecms链接URL中的list和show去掉

    finecms上手还算比较快吧,对seo关注的朋友会想着将它的url改造了,里面多了-list-和-show-,可以直接去掉,下面就随着ytkah一起来进行设置吧。   ...首先到后台的url规则,将列表和列表的-list去掉,将内容和内容分页的-show去掉,如下图所示 ?   第二步:修改伪静态规则文件。...更新全站缓存和更新文章URL   这样,finecms的URL改造就算完成了。   ...20170817优化一下:分页的分隔符换成下横线的“_”,栏目页改成这样{dirname}_{page}.html,因为栏目页的page值有可能跟{dirname}-{id}_{page}.html的id...值一样   有朋友反映finecms设置伪静态后分享到微信不能访问的处理方法

    1.4K60

    一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?

    :一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?...若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。...比如:某个URL(X)的哈希是2,那么落到这个byte数组在第二位上就是1,这个byte数组将是:000….00000010,重复的,将这20亿个数全部哈希并落到byte数组中。...但是如果这个byte数组上的第二位是0,那么这个URL(X)就一定不存在集合中。...多次哈希: 为了减少因哈希碰撞导致的误判概率,可以对这个URL(X)用不同的哈希算法进行N次哈希,得出N个哈希值,落到这个byte数组上,如果这N个位置没有都为1,那么这个URL(X)就一定不存在集合中

    1.1K40

    ​一日一技:如何替换URL中的query字段?

    摄影:产品经理 又到了吃梭子蟹的时候 在我们写爬虫的时候,可能会需要在爬虫里面基于当前url生成一个新的url。...每次请求的时候返回下一页的参数after。当要访问下一页的时候,用这个参数替换当前url中的after=后面的参数。 这样一来,替换url中的参数就并不是一件简单的事情了。...(url, 'after', '0000000') print(next_page) 运行效果如下图所示: 从图中可以看到,这4种情况,都可以被我们成功添加下一页的参数after= 0000000...ParseResult 对象的.query 属性,是一个字符串,也就是网址中,问号后面的内容,格式如下: parse_qs与urlencode也是一对相反函数。...以上,就是今天我们介绍的,如何使用urllib自带的函数替换网址中的字段。 END

    1.8K20

    一道有难度的经典大厂面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?

    问题 问题描述:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?...下面,我们将这20亿个数全部哈希并落到byte数组中: 如果byte数组上的第二位是1,那么这个URL(X)可能存在。为什么是可能?因为有可能其它URL因哈希碰撞哈希出来的也是2,这就是误判。...但是如果这个byte数组上的第二位是0,那么这个URL(X)就一定不存在集合中。 多次哈希 ?...为了减少因哈希碰撞导致的误判概率,可以对这个URL(X)用不同的哈希算法进行N次哈希,得出N个哈希值,落到这个byte数组上,如果这N个位置没有都为1,那么这个URL(X)就一定不存在集合中。...它的常用使用场景如下: 1、黑名单 : 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱(同理,垃圾短信) 2、URL去重 : 网页爬虫对URL的去重,避免爬取相同的URL地址 3、单词拼写检查

    85420

    如何使用CanaryTokenScanner识别Microsoft Office文档中的Canary令牌和可疑URL

    Office和Zip压缩文件中的Canary令牌和可疑URL。...在网络安全领域中,保持警惕和主动防御是非常有效的。很多恶意行为者通常会利用Microsoft Office文档和Zip压缩文件嵌入隐藏的URL或恶意宏来初始化攻击行为。...然后使用正则表达式扫描这些内容以查找URL,搜索潜在的入侵迹象; 3、忽略某些URL:为了最大限度地减少误报,该脚本包含了一个要忽略的域名列表,可疑过滤掉Office文档中常见的一些URL,这样可以确保对异常或潜在有害...URL进行集中分析; 4、标记可疑文件:URL不在被忽略列表中的文件被标记为可疑,这种启发式方法允许我们根据特定的安全上下文和威胁情况进行适应性调整; 5、清理和恢复:扫描任务完成后,该脚本可以删除临时解压缩的文件以进行清理...工具运行截图 下图显示的是该工具的任务执行界面,演示了其可疑URL检测能力: 项目地址 CanaryTokenScanner: https://github.com/0xNslabs/CanaryTokenScanner

    16010

    企业面试题: 如何获取浏览器中URL中查询字符串中的参数

    考核内容: BOMR操作与函数使用 题发散度: ★★★ 试题难度: ★★ 解题思路: window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。...Location 对象属性 hash 返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname 返回的URL路径名...port 返回一个URL服务器使用的端口号 protocol 返回一个URL协议 search 返回一个URL的查询部分 split() 方法 把一个字符串分割成字符串数组: 如果把空字符串 ("")...用作 separator,那么 stringObject 中的每个字符之间都会被分割。...字符串或正则表达式,从该参数指定的地方分割 string Object。 limit 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。

    4K30

    如何使用meg尽可能多地发现目标主机中的多个URL地址

    关于meg  meg是一款功能强大的URL信息收集工具,在该工具的帮助下,广大研究人员能够在不影响目标主机和服务器的情况下,尽可能多地收集与目标主机相关的大量URL地址。...该工具能够同时从多台主机中获取多条URL路径,而且在转移到下一个路径并重复之前,该工具还能够在所有主机中寻找同一条路径。.../rawhttp/request.go:102: u.Hostname undefined ( type *url.URL has no field or method Hostname) /root/.../out的目录中: ▶ head -n 20 ..../paths文件中读取路径,并从名为./hosts的文件中读取目标主机,而且不会提供任何输出: ▶ meg 但结果会存储在名为./out/index的索引文件中: ▶ head -n 2 .

    1.4K20

    【R语言】文本挖掘| 网页爬虫新闻内容

    图1 网页部分截图 02 安装与加载包 install.packages("rvest") library(rvest) 03 网页读取 urlurl) news%html_nodes('h2 a') #用浏览器打开网页,右键单击-检查,查看网页源代码特点,可以知道每条新闻位于h2,a节点读取网页节点...如何查看节点确定每篇新闻所在位置为'h2 a',详见视频: 关注公众号 后台回复【网页节点】查看视频 04 新闻题目title爬取 #获取title title%html_text()#...图2 link数据特点 从link的数据结构看,我们只需要href,这个就是每个新闻对应的子链接,因此,我们要写一个循环,将link中的href提取出来。...图3 link1数据特点 从link1来看,并不完全是链接格式,接下来利用paste将 https://www.thepaper.cn/与link1中的进行连接得到link2 link2<-paste(

    1.7K10

    左手用R右手Python系列之——表格数据抓取之道

    对于表格而言,R语言和Python中都封装了表格抓取的快捷函数,R语言中XML包中的readHTMLTables函数封装了提取HTML内嵌表格的功能,rvest包的read_table()函数也可以提供快捷表格提取需求...Python中read_html同样提供直接从HTML中抽取关系表格的功能。...readHTMLTable函数和rvest函数中的html_table都可以读取HTML文档中的内嵌表格,他们是很好的高级封装解析器,但是并不代表它们可以无所不能。...最后一个函数便是抓取网址链接的高级封装函数,因为在html中,网址的tag一般都比较固定,跳转的网址链接一般在标签的href属性中,图片链接一般在标签下的src属性内,比较好定位。...这里我们同样使用Python中的selenium+plantomjs工具来请求网页,获取完整的源文档之后,使用pd.read_html函数进行提取。

    3.3K60
    领券