假设给一个url给你.然后你获得html的源代码.现在你要生成一个javascript的document对象.请问算法如何实现

假设给一个url给你.然后你获得html的源代码.现在你要生成一个javascript的document对象.请问算法如何实现,第1张

不知道理解的对不对,如果你的javascript最终用浏览器或者浏览器内核程序去解析,那么直接在js中写document就可以,如果用其他程序解析javascript那么需要扩展其程序支持document,遵循w3c,文档对象模型DOM,document在js中无非也是一个对象,由一些属性组成。如果你在后端想获取类似document对象的内容,那需要自定义其属性并解析获取的html源码,做对应实现。

可以参考以下几种方法:

方法一: file_get_contents获取

<span style="white-space:pre"> </span>$url=">

<span style="white-space:pre"> </span>$fh= file_get_contents

('>

方法二:使用fopen获取网页源代码

<span style="white-space:pre"> </span>$url=">

<span style="white-space:pre"> </span>$handle = fopen ($url, "rb");

<span style="white-space:pre"> </span>$contents = "";

<span style="white-space:pre"> </span>while (!feof($handle)) {

<span style="white-space:pre">  </span>$contents = fread($handle, 8192);

<span style="white-space:pre"> </span>}

<span style="white-space:pre"> </span>fclose($handle);

<span style="white-space:pre"> </span>echo $contents; //输出获取到得内容。

方法三:使用CURL获取网页源代码

$url=">

$UserAgent = 'Mozilla/40 (compatible; MSIE 70; Windows NT 60; SLCC1; NET CLR 2050727; NET CLR 3004506; NET CLR 3521022; NET CLR 103705; NET CLR 114322)';

$curl = curl_init(); //创建一个新的CURL资源

curl_setopt($curl, CURLOPT_URL, $url); //设置URL和相应的选项

curl_setopt($curl, CURLOPT_HEADER, 0);  //0表示不输出Header,1表示输出

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设定是否显示头信息,1显示,0不显示。//如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_ENCODING, ''); //设置编码格式,为空表示支持所有格式的编码

//header中“Accept-Encoding: ”部分的内容,支持的编码格式为:"identity","deflate","gzip"。

curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

//设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做>

$data = curl_exec($curl);

echo $data;

//echo curl_errno($curl); //返回0时表示程序执行成功

curl_close($curl); //关闭cURL资源,并释放系统资源

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。

用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

参考资料:

PHP(超文本预处理器)-百度百科

Dim fso,ts,s

set WshShell = WScriptCreateObject("WScriptShell") 

Set fso = CreateObject("ScriptingFileSystemObject")

Set ts = fsoOpenTextFile("D:\urltxt" , 1)  'urltxt 放在 D盘

Do Until tsAtEndOfStream

s = tsReadLine

if len(s) > 1 then  '非空行

'msgbox s

url_tmp = Trim(s)  '去两端空格

'msgbox url_tmp

date_str = get_url(url_tmp)

'msgbox date_str

export_str url_tmp & " " & date_str & chr(13) & chr(10)

end if

loop

tsClose

set WshShell = nothing

set fso = nothing

set ts = nothing

msgbox "运行结束!"

Function get_url(url)

Dim >

一个月前实习导师布置任务说通过网络爬虫获取深圳市气象局发布的降雨数据,网页如下:

心想,爬虫不太难的,当年跟zjb爬煎蛋网无(mei)聊(zi)图的时候,多么清高。由于接受任务后的一个月考试加作业一大堆,导师也不催,自己也不急。

但是,导师等我一个月都得让我来写意味着这东西得有多难吧。。。今天打开一看的确是这样。网站是基于Ajax写的,数据动态获取,所以无法通过下载源代码然后解析获得。

从某不良少年写的抓取淘宝mm的例子中收到启发,对于这样的情况,一般可以同构自己搭建浏览器实现。phantomJs,CasperJS都是不错的选择。

导师的要求是获取过去一年内深圳每个区每个站点每小时的降雨量,执行该 *** 作需要通过如上图中的历史查询实现,即通过一个时间来查询,而这个时间存放在一个hidden类型的input标签里,当然可以通过js语句将其改为text类型,然后执行send_keys之类的 *** 作。然而,我失败了。时间可以修改设置,可是结果如下图。

为此,仅抓取实时数据。选取python的selenium,模拟搭建浏览器,模拟人为的点击等 *** 作实现数据生成和获取。selenium的一大优点就是能获取网页渲染后的源代码,即执行 *** 作后的源代码。普通的通过 url解析网页的方式只能获取给定的数据,不能实现与用户之间的交互。selenium通过获取渲染后的网页源码,并通过丰富的查找工具,个人认为最好用的就是find_element_by_xpath("xxx"),通过该方式查找到元素后可执行点击、输入等事件,进而向服务器发出请求,获取所需的数据。

[python] view plain copy

# coding=utf-8

from testString import 

from selenium import webdriver

import string

import os

from seleniumwebdrivercommonkeys import Keys

import time

import sys

default_encoding = 'utf-8'

if sysgetdefaultencoding() != default_encoding:

reload(sys)

syssetdefaultencoding(default_encoding)

district_navs = ['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']

district_names = ['福田区','罗湖区','南山区','盐田区','宝安区','龙岗区','光明新区','坪山新区','龙华新区','大鹏新区']

flag = 1

while (flag > 0):

driver = webdriverChrome()

driverget("hianCe/")

# 选择降雨量

driverfind_element_by_xpath("//span[@id='fenqu_H24R']")click()

filename = timestrftime("%Y%m%d%H%M", timelocaltime(timetime())) + 'txt'

#创建文件

output_file = open(filename, 'w')

# 选择行政区

for i in range(len(district_navs)):

driverfind_element_by_xpath("//div[@id='" + district_navs[i] + "']")click()

# print driverpage_source

timeElem = driverfind_element_by_id("time_shikuang")

#输出时间和站点名

output_filewrite(timeElemtext + ',')

output_filewrite(district_names[i] + ',')

elems = driverfind_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")

#输出每个站点的数据,格式为:站点名,一小时降雨量,当日累积降雨量

for elem in elems:

output_filewrite(AMonitorRecord(elemget_attribute("title")) + ',')

output_filewrite('\n')

output_fileclose()

driverclose()

timesleep(3600)

文件中引用的文件testString只是修改输出格式,提取有效数据。

[python] view plain copy

#Encoding=utf-8

def OnlyCharNum(s, oth=''):

s2 = slower()

fomart = 'abcdefghijklmnopqrstuvwxyz0123456789,'

for c in s2:

if not c in fomart:

s = sreplace(c, '')

return s

def AMonitorRecord(str):

str = strsplit(":")

return str[0] + "," + OnlyCharNum(str[1])

一小时抓取一次数据,结果如下:

1、火狐浏览器  点到一个空白的页面    右键 查看源代码  里面有url的一些地址;

还有一个方法是  :如果是window10系统的    按键盘 FN+F12可以查看源代码及网络状态等等

2、IE浏览器  点击空白处  右键查看源  :

希望对你有所帮助!!

你说的我有点听不懂,不知道你是不是说要获取网页中的源码内容

你可以写这样

建个文本变量

变量=到文本(>

import javaio;

import javanet;

public class Demo {

    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(Systemin));

        Systemoutprintln("请输入要显示源码的地址:");

        URL url = new URL(brreadLine());

        URLConnection conn = urlopenConnection();

        InputStream is = conngetInputStream();

        byte[] b = new byte[1024];

        int len = 0;

        while((len = isread(b))!=-1){

            Systemoutprintln(new String(b,0,len,"UTF-8"));

        }

    }

}

//下班,控制台的,网页的你稍微修改一下就OK啦。

以上就是关于假设给一个url给你.然后你获得html的源代码.现在你要生成一个javascript的document对象.请问算法如何实现全部的内容,包括:假设给一个url给你.然后你获得html的源代码.现在你要生成一个javascript的document对象.请问算法如何实现、php获取网页源码内容有哪些办法、谁会写个VBS脚本批量获取URL地址源代码内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9727598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存