`
cncomkyle
  • 浏览: 19862 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

抓取代理IP遇到的javascript解析问题

阅读更多

1. 问题描述:

利用脚本去自动从下面的这个网站抓取一些proxy ip:

[http://www.samair.ru/proxy/ip-address-01.htm]

[http://www.samair.ru/proxy/ip-address-02.htm]

[http://www.samair.ru/proxy/ip-address-03.htm]

...

[http://www.samair.ru/proxy/ip-address-30.htm]

 

通过curl跟awk,sed结合去抓取解析页面信息来获取代理IP跟Port

 

问题是抓取下来的结果中含有javascript代码如下:

110.77.204.131<script type="text/javascript">document.write(":"+u+w+u+w)</script>

从上面的代码可以看到,port变成了一些javascript变量输出。

 

通过firebug去分析,原来页面include了一个js文件,其中就一个函数来定义了每个英文字母对应的数字值。

 

再进一步调查,发现这个网站提供了几十页的proxy ip,但是每一页包含的js字符转换函数都不同。

 

为了让脚本能获取到正确的Port数值,必须解决如何解析这个js函数来获取最终的字母数字值对应表。

 

2. 解决方案:

利用Rhino Shell[https://developer.mozilla.org/en-US/docs/Rhino/Shell]来加载获取这个函数结果,在这个函数最后加上以下代码,把其中的变量名跟对应值输出:

    for(name in this) {print(name+\":\"+this[name]);}

 

测试结果如下:

$> rhino -f temp.js 

t:5

h:4

n:7

y:3

o:8

j:2

m:6

g:0

l:1

r:9

 

3. 测试跟源码:

getProxyList.sh:

#!/bin/bash

 

test_url=$1

 

temp_js="$(date +%Y_%m_%d_%H_%M_%S).js"

 

page_content=`curl -s -G "${test_url}"`

 

hostName=`printf "%s" "${test_url}" | sed -n -e '{s/.*\(http:\/\/\\)\([^\/]*\).*/\1\2/g;p;}'`

 

js_path=`printf "%s\n" "${page_content}" | \

sed -n -e '/type="text\/javascript"/p' | \

sed -n -e '/src="\/js\/[0-9]*\.js"/p' | \

sed -n -e '{s/.*src="\([^"]*\)".*/\1/g;p;}'`

 ## 获取JS内容

js_content=`curl -s -G "${hostName}${js_path}"`

 

getAllVarJs="for(name in this) {print(name+\":\"+this[name]);}"

 

printf "%s\n%s" "${js_content}" "${getAllVarJs}" > "${temp_js}"

 

#rhino运行JS,并获取字符数值对应结果

sed_sub_str=`rhino -f "${temp_js}" | \

awk -F ':' '

{

printf"s/%s/%s/g;",$1,$2;

}END{printf"\n"}'`

 

# printf "%s\n" "${sed_sub_str}"

 

printf "%s\n" "${page_content}" | \

awk '{printf"%s",$0}END{printf"\n"}'  | \

sed -n -e '{s/.*<table id="proxylist">\(.*\)<\/table>.*/\1/g;p;}' | \

sed -n -e '{s/^[[:blank:]][[:blank:]]*//g;p;}' | \

sed -n -e '{s/>[[:blank:]][[:blank:]]*</></g;p;}' | \

sed -n -e '{s/\(<\/tr>\)/\1\n/g;p;}' | \

sed -n -e '{/script/p}' | \

sed -n -e '{s/<tr>//g;s/<\/tr>//g;s/<\/td>//g;p;}'  | \

awk -F '<td>' '{print $2}' | \

sed -n -e '{s/\(.*\)<script.*write(":"\(.*\)).*/\1:\2/g;s/+//g;p;}' | \

sed -n -e '{'"${sed_sub_str}"'p;}'

 

rm -f "${temp_js}"

 

$> sh getProxyList.sh http://www.samair.ru/proxy/ip-address-02.htm

110.208.26.192:9000

110.208.26.204:9000

110.208.26.221:9000

110.208.27.111:9000

110.208.27.118:9000

110.208.27.142:9000

110.208.27.60:9000

110.208.27.75:9000

110.5.104.238:80

110.78.162.238:3128

111.1.32.51:82

111.119.161.46:80

...

 

4. 进一步研究:

以上解决方案是需要手工分析对应代码,找到对应的JS方法来做解析分析。

应该有更加智能自动的方法来模拟firefox浏览器直接生成js运行后的html代码。

如有同学知道这类工具,请回复。

 

 

 

 

 

分享到:
评论

相关推荐

    代理扫描IP

    标签“IP代理抓取”进一步强调了主题的核心,即获取和管理代理IP的整个流程,包括获取源、筛选有效IP、测试代理速度和稳定性,以及可能的IP更新维护。 在压缩包文件名"proxy7.32"中,"proxy"显然与代理IP有关,而...

    用于nodejs的网络爬虫抓取器蜘蛛_JavaScript_HTML_下载.zip

    6. **反爬机制**:处理验证码、IP封锁、User-Agent等问题,可能需要使用代理IP池和随机设置请求头。 7. **异常处理**:捕获和处理可能出现的各种错误,确保程序稳定运行。 在JavaScript中,我们可以使用异步编程...

    页面数据抓取

    此外,抓取过程中还可能遇到编码问题、网页结构复杂难以解析、动态加载的内容等问题,都需要开发者具备一定的调试和解决问题的能力。 "HTMLIoImpl"可能是某个特定的HTML输入/输出实现,这通常涉及到如何处理抓取到...

    动态修改IP地址

    文件名“AutoChangeIP”很可能是一个这样的自动化脚本,它可能包含了获取代理IP、解析返回数据和设置IE代理的逻辑。 5. **安全与隐私**:虽然代理IP可以提供一定程度的匿名性,但并非完全安全。有些高级的追踪技术...

    java解析html抓取网站数据采集网站信息

    为解决这些问题,可以采用设置User-Agent、延迟请求、使用代理IP、处理JavaScript等技术。 此外,对于大规模的数据采集,可能需要考虑多线程或分布式爬虫,例如使用Apache HttpClient或OkHttp并发请求,或者结合...

    Java网页抓取数据

    这可以通过调用IP查询服务(如纯真IP数据库)来实现,通常需要处理反爬策略,比如设置User-Agent、代理IP等。 4. **快递查询**:如果要从快递公司网站抓取物流信息,需要熟悉快递公司的API接口或解析他们的查询结果...

    抓取淘宝页面数据

    总结来说,抓取淘宝页面数据涉及的知识点包括:HTTP请求与响应、HTML和JavaScript解析、网页自动化工具(Selenium、Puppeteer)、反爬策略与应对、API接口利用、数据存储与处理,以及相关的法律法规遵循。...

    网页数据提取和浏览器自动代理设置(附源码)

    这个程序可能包含了自动获取代理服务器以及设置本地浏览器代理的机制,这对于需要通过多代理IP进行大量网页抓取的场景非常有用。 数据提取通常包括以下几个方面: 1. HTML解析:通过解析HTML文档结构,定位到目标...

    101、103、104电力规约报文解析工具

    报文解析工具可以帮助工程师和技术人员理解通信过程中的数据结构,定位通信问题,优化系统性能。例如,当系统出现数据传输错误或通信中断时,通过报文解析工具可以查看报文内容,找出问题源头。 IEC8705.exe很可能...

    java web网站常用抓取其他网站内容

    9. **异常处理与重试机制**:网络环境不稳定,可能会遇到请求失败、超时等问题。因此,编写健壮的异常处理和重试机制是必要的。 10. **性能优化**:通过多线程、并发控制、批量请求等手段,可以进一步提升抓取速度...

    抓取站点的程序

    JavaScript文件的抓取则更为复杂,因为它们通常包含了页面动态加载和交互逻辑,爬虫需要解析这些文件来模拟浏览器的行为,以便获取隐藏或动态生成的内容。 关于“尤其对图片非常有用”,可能是指爬虫在处理图像密集...

    抓取网上信息,抓取人人网院校

    可能涉及到的技术包括反爬虫策略的应对,比如设置User-Agent、处理Cookies、使用代理IP等,以及处理登录验证,如果人人网需要用户登录才能查看某些信息的话。 描述中提到的“博文链接:...

    网站图片抓取工具

    3. **反爬策略**:很多网站有反爬虫机制,可能需要处理验证码、IP限制等问题,甚至使用代理IP进行抓取。 4. **合规性**:确保遵循网站的robots.txt协议,并尊重版权,避免非法抓取。 5. **存储和管理**:合理组织和...

    网页数据比分抓取源码

    此外,随着网站动态加载和反爬虫技术的发展,抓取过程中可能需要处理JavaScript执行、登录验证、验证码识别等问题。 在实际应用中,数据抓取可以结合数据清洗、数据分析等环节,形成完整的数据处理流程,用于竞彩...

    网站访客 抓取qq 获取访客qq号 统计

    总结来说,"网站访客抓取qq获取访客qq号统计"涉及到的技术包括多线程抓取、JavaScript解析、数据库管理、邮件通知、强制对话以及网站后端开发等多个方面,需要在合法合规的前提下,结合有效的数据处理策略,才能实现...

    抓取网页图片,css和js

    本话题主要关注如何抓取网页上的图片、CSS(层叠样式表)和JavaScript文件,以及处理CSS中内联的图片资源。下面将详细讨论这些知识点。 一、网页抓取基础 网页抓取通常通过网络爬虫实现,这是一种自动遍历互联网并...

    Python数据抓取技术与实战.pdf

    了解常见的反爬虫策略(如IP封禁、用户代理检查、验证码等),并学习相应的应对措施(如代理IP池、动态用户代理、验证码识别等)是爬虫工程师必须掌握的技能。 10. 法律法规遵守: 爬虫运行应遵守相关法律法规,如...

    C#抓取网页数据,彩票数据查询

    这是因为某些网站可能会阻止来自同一IP地址的频繁请求,设置代理可以绕过这一限制。在C#中,HttpClient类允许我们配置代理服务器,或者在不需要代理时禁用它。 5. **异常处理**:在进行网络操作时,应始终考虑异常...

    抓取网站实例配置(一)

    4. 反爬策略:了解网站的反爬机制,如IP限制、验证码和User-Agent变化,学习如何设置代理和更换请求头以绕过限制。 5. 数据存储:将抓取的数据存储在本地文件或数据库,如CSV、JSON或MySQL。 6. Flash内容处理:对于...

    java网页抓取数据

    Java网页抓取数据是互联网数据挖掘的一个重要领域,它允许开发者通过编程方式获取网页上的信息,从而实现自动化...在实际项目中,可能还需要考虑多线程爬虫、IP代理池等高级话题,以提高抓取效率和应对更复杂的场景。

Global site tag (gtag.js) - Google Analytics