首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >屏幕刮擦HTML头内容?

屏幕刮擦HTML头内容?
EN

Stack Overflow用户
提问于 2012-04-05 05:04:38
回答 2查看 843关注 0票数 2

我很乐意使用CSS元素来抓取HTML内容,将其作为识别我想要的内容的一种方法,但我需要抓取网页部分的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0028)http://www.peoplesafe.co.uk/ -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>PeopleSafe</title>
    <link href="css/screen.css" media="screen" rel="stylesheet" type="text/css" />
    <!--[if lte IE 6]>
    <link href="http://www.peoplesafe.co.uk/styles/default/screen_ie6.css" media="screen" rel="stylesheet" type="text/css" />
    <![endif]-->
    <link rel="icon" href="http://www.peoplesafe.co.uk/styles/default/favicon.ico" />

        <script type="text/javascript" src="js/tabpane.js"></script> 
    <link type="text/css" rel="StyleSheet" href="css/tab.webfx.css?v=2" />


    <meta http-equiv="Author" content="Rare Creative Group" />
    <meta http-equiv="Description" content="Experts in lone worker safety" />
    <meta http-equiv="Keywords" content="lone, worker, safety" />
    <script type="text/javascript" src="js/spotlight.js"></script>
    <script type="text/javascript" src="js/promo.js"></script>    

<script src="http://maps.google.com/maps?ile=api&amp;v=2&amp;sensor=true&amp;key=ABQIAAAA04SCF3o4CZghg6c0Qqgd-RQxzn3bXKr_TQ6C8c2CiIf8-vjJhBS3endtVbbJ1vftXL4Wbb2PwuJ8ag" type="text/javascript"></script> 
<script type="text/javascript"> 
//<![CDATA[
function load()
{
    // required for original Peoplesafe layout:
    start();

    if ( GBrowserIsCompatible() )
    {
        // codice setcenter:
        var map = new GMap2( document.getElementById( "map" ) );

        var customUI = map.getDefaultUI();
        // Remove MapType.G_HYBRID_MAP
        //customUI.maptypes.hybrid = false;
        map.setUI(customUI);
        //map.addControl( new GSmallMapControl() );
        //map.addControl( new GMapTypeControl() );

        map.setCenter( new GLatLng( 51.612308, -1.239453 ), 11 );

        // Crea un nuovo marker nel punto specificato con una descrizione HTML associata:
        function createMarker( point, description, primary_contact_id )
        {
            //var icon = new GIcon();
            ////icon.shadow = "/images/nuvola.png";
            //icon.iconSize = new GSize(87, 38);
            ////icon.shadowSize = new GSize(107, 38);
            //icon.iconAnchor = new GPoint(6, 20);
            //icon.infoWindowAnchor = new GPoint(5, 1);
            //icon.image = "/img/.";

我需要从这一行解析纬度和经度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
map.setCenter( new GLatLng( 51.612308, -1.239453 ), 11 );

所以,在我桌子的一栏里,我想要第一部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
51.612308

在第二栏中,我希望第二部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-1.239453

如果没有CSS选择器,这是可能的吗?

编辑

谢谢你到目前为止的帮助,非常感谢!

最初的问题是,一旦您登录到该站点,我就会重新定向,现在我会这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
put page.root

我得到了我所期望的页面的全部来源。所以现在我的代码(登录后)是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
html_doc = page.root

# Find the first <script> in the head that does not have src="..."
#script = html.at_xpath('/html/head/script[not(@src)]')

# Use a regex to find the correct code parts in the JS, using named captures
parts = script.text.match(/new GLatLng\(\s*(?<lat>.+?)\s*,\s*(?<long>.+?)\s*\)/)

p parts[:lat], parts[:long]
#=> "51.612308"
#=> "-1.239453"

在运行上述命令时,我会得到一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
undefined local variable or method `script' for main:Object
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-05 08:05:35

这里有一个解决方案;请注意返回的部分是字符串,因此您可能需要调用它们的to_f来执行计算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require 'nokogiri'
html_doc = Nokogiri.HTML(my_html)

# Find the first <script> in the head that does not have src="..."
script = html_doc.at_xpath('/html/head/script[not(@src)]')

# Use a regex to find the correct code parts in the JS, using named captures
parts = script.text.match(/new GLatLng\(\s*(?<lat>.+?)\s*,\s*(?<long>.+?)\s*\)/)

p parts[:lat], parts[:long]
#=> "51.612308"
#=> "-1.239453"

如果您不习惯使用这个XPath表达式来查找脚本,您也可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
script = html.css('head script').find{ |el| el['src'].nil? }

即在头中查找所有脚本标记,然后使用标准红宝石法查找与特定条件匹配的第一个元素。

编辑:如果您正在使用机械化,它在内部使用Nokogiri来解析和处理文档。您可以通过代码直接获得Nokogiri HTML文档对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
html_doc = my_mechanize_page.root

…或者您可以使用Mechanize::Page#at方法在页面内容的内部调用Nokogiri自己的at

我个人更喜欢前者,因为Nokogiri文档为您提供了一组比at__更丰富的方法。但是,这两种方法都适用于上述代码。

编辑2:例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
script = page.at('/html/head/script[not(@src)]')
parts = script.text.match(/new GLatLng\(\s*(?<lat>.+?)\s*,\s*(?<long>.+?)\s*\)/)
票数 3
EN

Stack Overflow用户

发布于 2012-04-05 05:12:58

是的,没有CSS选择器,这是可能的。如果您可以将页面读入缓冲区或数组中,则可以将所需的部分分离开来。

()上进行分隔将允许您检查惟一的字符串new GLatLng。你知道,这将是你的长/长之前的元素。还请参阅NitinJS的评论和此页面以帮助拆分字符串http://www.tizag.com/javascriptT/javascript-string-split.php

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10029166

复制
相关文章
Hibernate延迟加载
上一篇文章我们学习了Hibernate的多表关联关系,这里就涉及到一个很实用的概念:延迟加载或者也叫惰性加载,懒加载。使用延迟加载可以提高程序的运行效率。Java程序与数据库交互的频次越低,程序运行效率越高,所以我们应该尽量减少Java程序与数据库的交互次数,Hibernate延迟加载就很好的做到了这一点。
南风
2019/04/22
1.4K0
Hibernate延迟加载
Spring整合Hibernate、Hibernate JPA、Spring Data JPA、Spring Data Redis
环境说明,使用Jdk1.8版本,spring4.2.0.RELEASE版本、hibernate5.0.7.Final版本,spring-data-jpa-1.9.0.RELEASE版本、spring-data-redis-1.6.0.RELEASE版本。
别先生
2020/05/27
5.6K0
Hibernate之延迟加载
文章目录 1. hibernate之延迟加载 1.1. 什么是延迟加载 1.2. 好处 1.3. 如何使用延迟加载 1.4. 使用延迟加载需要注意的问题 hibernate之延迟加载 什么是延迟加载 在使用某些Hibernate方法查询数据的时候,Hibernate返回的只是一个空对象(除了id外属性都为null),并没有真正的查询数据库。而是在使用这个对象的时候才会出发查询数据,并将查询到的数据注入到这个空对象中,这种查询时机推迟到对象访问时的机制称之为延迟加载。 简单的说,使用延迟加载获取的对象,只
爱撒谎的男孩
2019/12/31
9320
hibernate延迟加载详解
hibernate延迟加载详解 Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。 下面先来剖析 Hibernate 延迟加载的“秘密”。 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时,完成所有集合属性
Java帮帮
2018/03/19
1.4K0
hibernate延迟加载详解
Spring整合Hibernate JPA
JPA:就是由Sun公司提供的一套对于持久层操作的标准(接口加文档),没有具体的实现。
害恶细君
2022/11/22
1.2K0
Hibernate延迟加载 lazy loading
/**  *  * @author XHW  *  * @date 2011-7-18  *  */ public class HibernateTest {  public static void main(String[] args) {   new HibernateTest().update();  }  public void update(){   Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();   session.beginTransaction();  Category category=(Category)session.get(Category.class, 1);   System.out.println("id:"+category.getId()+"  ,name:"+category.getName()+", description:"+category.getDescription());   Set<Product> products=category.getProducts();   session.getTransaction().commit();    } }
Hongten
2018/09/18
1.1K0
Hibernate 和 JPA
Hibernate 在 5 以后的版本中全面推进使用 JPA 的查询语法,甚至准备废弃掉自己已有的查询语法。
HoneyMoose
2022/01/13
5070
Hibernate 和 JPA
Hibernate 的延迟加载(懒加载)简介1
什么是延迟加载: 在使用某些Hibernate方法查询数据时,Hibernate返回的只是一个空对象(除id外属性都为null),并没有真正查询数据库。而在使用这个对象时才会触发查询数据库,并将查询到的数据注入到这个空对象中。这种将查询时机推迟到对象访问时的机制称之为延迟加载。 ---- 为什么要使用延迟加载: 可以提升内存资源的使用率 可以降低对数据库的访问次数 ---- 采用延迟加载的方法: session.load() 查询时不进行SQL查询,在使用对象时才执行SQL查询;效率高 query.i
qubianzhong
2018/08/10
1.4K0
JPA、Hibernate、Spring Data JPA 的关系,你懂吗?
来源:https://my.oschina.net/u/3080373/blog/1828589
Java技术栈
2019/07/31
1.8K0
Spring全家桶之SpringData——Spring 整合Hibernate与Hibernate Jpa
注意 1. sql语句 ,是通过对象查询的表 ,虽然可以出现select 但是却不能出现通配符 *,故可以省略 Select * 2 .区别 getCurrentSession 与openSession 方法的用法 getCurrentSession:当前session 必须要有事务边界, 且只能处理唯一的一个事务。当事务提交或者回滚后session 自动失效 openSession:每次都会打开一个新的session.加入每次使用多次。则获得的是不同session 对象。使用完毕后我们需要手动的调用colse方法关闭session
时间静止不是简史
2020/07/25
2.9K0
Hibernate Session和Jpa EntityManager
本文适用 Hibernate:4.3.11.Final 和 spring-data-jpa:1.10.4.RELEASE 。
pollyduan
2019/11/04
2.1K0
使用Spring Boot,JPA,Hibernate和Postgres的多租户应用程序
多租户是一种方法,应用程序实例由不同的客户使用,从而降低软件开发和部署成本,与单一租户解决方案相比,在这种解决方案中,需要触及多个部分以提供新客户端或更新现有租户。
Java架构师历程
2018/09/26
7.8K1
使用Spring Boot,JPA,Hibernate和Postgres的多租户应用程序
spring data jpa hibernate jpa 三者之间的关系
JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现,JBoss应用服务器底层就以Hibernate作为JPA的实现。
用户3148308
2018/09/13
1.3K0
spring data jpa hibernate jpa 三者之间的关系
mybatis和hibernate的以及jpa区别_hibernate sql
hibernate和mybatis是当前流行的ORM框架。hibernate对数据库结构提供了较为完整的封装。mybatis主要着力点在于java对象与SQL之间的映射关系。
全栈程序员站长
2022/09/30
1.2K0
mybatis和hibernate的以及jpa区别_hibernate sql
JPA、Hibernate、Spring data jpa之间的关系,终于明白了
全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。
hbbliyong
2018/07/24
1.5K0
JPA、Hibernate、Spring data jpa之间的关系,终于明白了
JPA、Hibernate、Spring data jpa之间的关系,终于明白了
全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。
java思维导图
2018/07/26
2.3K0
JPA、Hibernate、Spring data jpa之间的关系,终于明白了
Spring Data JPA 介绍和使用
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情。下面来逐步介绍它的强大功能。
乐百川
2022/05/05
3.6K0
JPA/Hibernate问题汇总
报错很明显,是由于hibernate的懒加载引起的。项目使用的是SpringBoot框架,JPA默认使用的是hibernate的实现,而hibernate的懒加载机制其实就是延迟加载对象,如果没有在session关闭前使用到对象里除id以外的属性时,就只会返回一个没有初始化过的包含了id的代理类。很多时候,这个代理类会引发上述的异常。
雨临Lewis
2022/01/12
2.6K0
spring-boot开发过程中的问题汇总
在application.properties中加上spring.jpa.properties.hibernate.default_schema=[user],由于oracle不同表空间下可以有同名表,而表的访问都是user.table,这样来区分不同表空间同名表造成的问题。
sucl
2019/08/07
1.3K0
聊聊spring data jpa的OpenSessionInView
本文主要研究一下spring data jpa的OpenSessionInView
code4it
2019/04/13
3.8K0
聊聊spring data jpa的OpenSessionInView

相似问题

为什么我的HttpClient.SendAsync被取消了?

23

绝对定位:为什么我的盒子被抵消了?

11

为什么我的地图标记ObjectAnimators被取消了?

10

为什么这个功能被取消了?

21

为什么这个孩子被抵消了?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文