社区
JavaScript
帖子详情
能不能单纯用js来抓取网页的源代码,请求时间等信息??
Dee_XChen
2016-03-22 10:12:12
公司分配给我一个项目,叫我实现在线HTTP接口测试功能,如:
http://www.atool.org/httptest.new.bk.php
怎么实现??试过用jsonp也不行,求大神
...全文
157
4
打赏
收藏
能不能单纯用js来抓取网页的源代码,请求时间等信息??
公司分配给我一个项目,叫我实现在线HTTP接口测试功能,如:http://www.atool.org/httptest.new.bk.php 怎么实现??试过用jsonp也不行,求大神
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hch126163
2016-03-23
打赏
举报
回复
js 不能获取一个网页的页面源代码 只有支持 jsonp 的接口,才能跨域获取
顾小林
2016-03-23
打赏
举报
回复
js 最多抓取页面内容,对于页面引入的js 资源什么的 估计下载不下来
Dee_XChen
2016-03-22
打赏
举报
回复
搞不定!!!怎么办
Dee_XChen
2016-03-22
打赏
举报
回复
不用后台处理怎么实现
源代码
--LOL皮肤爬虫
爬取LOL所有英雄皮肤
源代码
,我们通过分析英雄联盟官
网页
面,进入到资料库页面,分析英雄所在的页面这里有两种类型的同样的图片,一种是大图片的,一种是类似头像的小图片。我们这里
抓取
大图片拿到几种图片链接分析https://game.gtimg.cn/images/lol/act/img/skin/big5000.jpg可以发现所有英雄皮肤链接url除了数字之前的都一样,而且后面的数字都是以英雄id+三位数拼接而成(三位数从000开始,但是有的英雄并不是就是依次排列,可能000,,001,002会直接跳到013) 由于英雄联盟官网也是做了反爬措施了的,所有图片也是使用局部加载的方式,在开发者工作中,可以找到一个
js
文件,里面包含了英雄id与英雄的对应关系通过
请求
该
js
,获取其
源代码
,使用正则表达式将其提取出来,用于后面的url拼接
crawloop:基于PlayWright和xvfb实现对
js
渲染的动态
网页
进行
抓取
,包含
网页
源码,截图,网站入口发现,
网页
互动过程等等,支持优先级任务调度
爬网 基于PlayWright实现对
js
渲染的动态
网页
进行
抓取
,包含
网页
源码,截图,网站入口,
网页
互动过程等,支持优先级任务调度。 crawloop目前支持一下特性 原生浏览器环境,支持chrome,firefox,协程处理调度任务 完整DOM事件收集,自动化触发 全面分析收集,包括
js
文件,页面原始码,网站截图,网站图标,标题,编码,cookies,重新链接等等 支持主机绑定,可自定义添加Referer 支持
请求
代理,支持爬虫结果主动替换 环境(Docker) Docker 18.03以上 Postgresl 9.x以上 Rabbitmq 3.8.x以上 Docker Compose 1.24+ 架构 Crawloop的架构包括了一个主节点(主节点)和多个工作例程(Worker Node),以及负责通信和数据存储的gRPC和Postgresql数据库。 (上图架构有所变化,Mong
用Python爬取最新股票数据含完整
源代码
用Python爬取最新股票数据含完整
源代码
抓取
目标: url:http://webapi.cninfo.com.cn/#/marketDataDate 数据目标: 获取 证券代码 证券简称 交易日期 开盘价 最高价 最低价 收盘价 成交数量 难点:
请求
头参数mcode 加密生成 使用第三方库: 1. requests 2. exec
js
3.
js
2py 4. math 5. time 6. pandas
wintrAPI:免费从网络上刮取无限数据
WINTR API WINTR是一个免费且易于使用的网络
抓取
API,可让您
抓取
任何
网页
并解析其HTML内容,而无需处理代理,IP旋转,无头浏览器和验证码。 创建帐户以开始使用 目录 刮擦Javascript呈现的
网页
,包括外部资产
抓取
Javascript呈现的
网页
并等待5秒钟 刮擦Javascript呈现的
网页
并等待元素加载 使用自定义Cookie
抓取
Javascript呈现的
网页
刮擦Javascript呈现的
网页
并发送表格 刮擦Javascript呈现的
网页
并执行Javascript代码段 住宅代理 跨多个
请求
的会话 HTML解析 生产示例(Amazon,eBay,Zalando等) 下一级别:已保存的
请求
附加
信息
特征
请求
伪造(方法,主体,标头,引荐来源网址,用户代理,身份验证,Cookie) JavaScript呈现的网站
抓取
(包括加载和呈现参数) 嵌入式HTML
Python入门网络爬虫之精华版
Python入门网络爬虫之精华版 Python学习网络爬虫主要分3个大的版块:
抓取
,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫 当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入http://www.lining0806.com/,你就会看到宁哥的小站首页。 简单来说这段过程发生了以下四个步骤: 查找域名对应的IP地址。 向IP对应的服务器发送
请求
。 服务器响应
请求
,发回
网页
内容。 浏览器解析
网页
内容。 网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。
抓取
这一步,你要明确要得到的内容是什么?是HTML源码,还是
Js
on格式的字符串等。 1. 最基本的
抓取
抓取
大多数情况属于get
请求
,即直接从对方服务器上获取数据。 首先,Python中自带urllib及urllib2这两个模块,基本上能满足一般的页面
抓取
。另外,requests也是非常有用的包,与此类似的,还有httplib2等等。 Requests: import requests response = requests.get(url) content = requests.get(url).content print "response headers:", response.headers print "content:", content Urllib2: import urllib2 response = urllib2.urlopen(url) content = urllib2.urlopen(url).read() print "response headers:", response.headers print "content:", content Httplib2: import httplib2 http = httplib2.Http() response_headers, content = http.request(url, 'GET') print "response headers:", response_headers print "content:", content 此外,对于带有查询字段的url,get
请求
一般会将来
请求
的数据附在url之后,以?分割url和传输数据,多个参数用&连接。 data = {'data1':'XXXXX', 'data2':'XXXXX'} Requests:data为dict,
js
on import requests response = requests.get(url=url, params=data) Urllib2:data为string import urllib, urllib2 data = urllib.urlencode(data) full_url = url+'?'+data response = urllib2.urlopen(full_url) 相关参考:网易新闻排行榜
抓取
回顾 参考项目:网络爬虫之最基本的爬虫:爬取网易新闻排行榜 2. 对于登陆情况的处理 2.1 使用表单登陆 这种情况属于post
请求
,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。 data = {'data1':'XXXXX', 'data2':'XXXXX'} Requests:data为dict,
js
on import requests response = requests.post(url=url, data=data) Urllib2:data为string import urllib, urllib2 data = urllib.urlencode(data) req = urllib2.Request(url=url, data=data) response = urllib2.urlopen(req) 2.2 使用cookie登陆 使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。 import requests requests_session = requests.session() response = requests_session.post(url=url_login, data=data) 若存在验证码,此时采用response = requests_session.post(url=url_login, data=data)是不行的,做法应该如下: response_captcha = requests_session.get(url=url_login, cookies=cookies) response1 = requests.get(url_login) # 未登陆 response2 = requests_session.get(url_login) # 已登陆,因为之前拿到了Response Cookie! response3 = requests_session.get(url_results) # 已登陆,因为之前拿到了Response Cookie! 相关参考:网络爬虫-验证码登陆 参考项目:网络爬虫之用户名密码及验证码登陆:爬取知乎网站 3. 对于反爬虫机制的处理 3.1 使用代理 适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况。 这种情况最好的办法就是维护一个代理IP池,网上有很多免费的代理IP,良莠不齐,可以通过筛选找到能用的。对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。 proxies = {'http':'http://XX.XX.XX.XX:XXXX'} Requests: import requests response = requests.get(url=url, proxies=proxies) Urllib2: import urllib2 proxy_support = urllib2.ProxyHandler(proxies) opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler) urllib2.install_opener(opener) # 安装opener,此后调用urlopen()时都会使用安装过的opener对象 response = urllib2.urlopen(url) 3.2
时间
设置 适用情况:限制频率情况。 Requests,Urllib2都可以使用time库的sleep()函数: import time time.sleep(1) 3.3 伪装成浏览器,或者反“反盗链” 有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer
信息
还会检查你的Referer是否合法,一般再加上Referer。 headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝爬虫的网站 headers = {'Referer':'XXXXX'} headers = {'User-Agent':'XXXXX', 'Referer':'XXXXX'} Requests: response = requests.get(url=url, headers=headers) Urllib2: import urllib, urllib2 req = urllib2.Request(url=url, headers=headers) response = urllib2.urlopen(req) 4. 对于断线重连 不多说。 def multi_session(session, *arg): retryTimes = 20 while retryTimes>0: try: return session.post(*arg) except: print '.', retryTimes -= 1 或者 def multi_open(opener, *arg): retryTimes = 20 while retryTimes>0: try: return opener.open(*arg) except: print '.', retryTimes -= 1 这样我们就可以使用multi_session或multi_open对爬虫
抓取
的session或opener进行保持。 5. 多进程
抓取
这里针对华尔街见闻进行并行
抓取
的实验对比:Python多进程
抓取
与 Java单线程和多线程
抓取
相关参考:关于Python和Java的多进程多线程计算方法对比 6. 对于Ajax
请求
的处理 对于“加载更多”情况,使用Ajax来传输很多数据。 它的工作原理是:从
网页
的url加载
网页
的
源代码
之后,会在浏览器里执行JavaScript程序。这些程序会加载更多的内容,“填充”到
网页
里。这就是为什么如果你直接去爬
网页
本身的url,你会找不到页面的实际内容。 这里,若使用Google Chrome分析”
请求
“对应的链接(方法:右键→审查元素→Network→清空,点击”加载更多“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。 如果“
请求
”之前有页面,依据上一步的网址进行分析推导第1页。以此类推,
抓取
抓Ajax地址的数据。 对返回的
js
on格式数据(str)进行正则匹配。
js
on格式数据中,需从'\uxxxx'形式的unicode_escape编码转换成u'\uxxxx'的unicode编码。 7. 自动化测试工具Selenium Selenium是一款自动化测试工具。它能实现操纵浏览器,包括字符填充、鼠标点击、获取元素、页面切换等一系列操作。总之,凡是浏览器能做的事,Selenium都能够做到。 这里列出在给定城市列表后,使用selenium来动态
抓取
去哪儿网的票价
信息
的代码。 参考项目:网络爬虫之Selenium使用代理登陆:爬取去哪儿网站 8. 验证码识别 对于网站有验证码的情况,我们有三种办法: 使用代理,更新IP。 使用cookie登陆。 验证码识别。 使用代理和使用cookie登陆之前已经讲过,下面讲一下验证码识别。 可以利用开源的Tesseract-OCR系统进行验证码图片的下载及识别,将识别的字符传到爬虫系统进行模拟登陆。当然也可以将验证码图片上传到打码平台上进行识别。如果不成功,可以再次更新验证码识别,直到成功为止。 参考项目:Captcha1 爬取有两个需要注意的问题: 如何监控一系列网站的更新情况,也就是说,如何进行增量式爬取? 对于海量数据,如何实现分布式爬取? 分析
抓取
之后就是对
抓取
的内容进行分析,你需要什么内容,就从中提炼出相关的内容来。 常见的分析工具有正则表达式,BeautifulSoup,lxml等等。 存储 分析出我们需要的内容之后,接下来就是存储了。 我们可以选择存入文本文件,也可以选择存入MySQL或MongoDB数据库等。 存储有两个需要注意的问题: 如何进行
网页
去重? 内容以什么形式存储? Scrapy Scrapy是一个基于Twisted的开源的Python爬虫框架,在工业中应用非常广泛。 相关内容可以参考基于Scrapy网络爬虫的搭建,同时给出这篇文章介绍的微信搜索爬取的项目代码,给大家作为学习参考。 参考项目:使用Scrapy或Requests递归
抓取
微信搜索结果
JavaScript
87,923
社区成员
224,618
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章