网络爬虫语言选择

Java
laical
初来炸道
初来炸道
帖子: 9
注册时间: 2020年03月26日 17:45
拥有现金: 锁定
联系:

网络爬虫语言选择

帖子 #1 laical » 2020年06月17日 17:26

什么是网络爬虫
“网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。”
爬虫的作用
爬虫能干的事情比较多,并且有些领域和爬虫都有很大的关联。不同深度,技术的爬虫工作者能干的事情也不同。
搜索引擎 抢票、刷票 金融等行业数据挖掘、分析数据来源等其他
爬虫语言的选择
• 对于初学者肯定会对选择java和python有些java爱好者可能会有点难受。对于java和python的爬虫。不能全全论之。因为各个语言有各个语言的特色。
• 就爬虫而言,个人感觉用python更方便,得益于python精简的语法和弱类型变量。能够伸缩自如。这样还有一点就是python的字典操作起来远比java的Map方便。而java的强变量让书写变得稍加繁琐。
• 但是如果遇到多线程,高并发问题其实还是java占优。python只能用多进程来优化速度而假的多线程对性能提升有限。
爬虫小技巧
ip、浏览器头(User-Agent)、和cookie限制
1 使用cookie登陆
使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。
2 使用代理
适用情况:大部分网站均限制了IP的访问量
对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。
#! -*- encoding:utf-8 -*-
import requests
import random
# 要访问的目标页面
targetUrl = "http://httpbin.org/ip"
# 要访问的目标HTTPS页面
# targetUrl = "https://httpbin.org/ip"
# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"
# 代理隧道验证信息
proxyUser = "username"
proxyPass = "password"
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
# 设置 http和https访问都是用HTTP代理
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
}
# 设置IP切换头
tunnel = random.randint(1,10000)
headers = {"Proxy-Tunnel": str(tunnel)}
resp = requests.get(targetUrl, proxies=proxies, headers=headers)
print resp.status_code
print resp.text
3 优化UA
有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer。
User-Agent可以用亿牛云代理IP提供给的真实库,Referer的来源可以伪装成百度搜索来的。

performance && performance.mark && performance.mark("start-js-render");


var MaxErrorReportLimit = 100;
// 简单的将错误采集上报到 /api/logs/error
window.onerror = function(message, source, lineno, colno, error) {
// 同一个页面最多上报100次错误,防止某个循环错误页面一直打开,不断的报错
if (MaxErrorReportLimit-- < 0) return;
try {
var msg = {
message: message,
source: source,
lineno: lineno,
colno: colno,
stack: error && error.stack,
traceId: window.appData && window.appData.traceId,
href: window.location.href,
};
msg = JSON.stringify(msg);
// 用于 macaca E2E 自动化测试
window.__macaca_latest_error = msg;
var req = new XMLHttpRequest();
req.open('post', '/api/logs/error', true);
req.setRequestHeader('Content-Type', 'application/json');
req.send(msg);
// yuyanMonitor 记录错误堆栈
if (window.yuyanMonitor) {
yuyanMonitor.logError(error, {
code: 1,
msg: message,
});
}
} catch (err) {
console.log('report error', err);
}
};
// 监听 window.onload 是否执行,用于组件中执行 onload 后续事件
window.addEventListener('load', function() {
try {
// 移动端开启
var isMobile = navigator.userAgent.toLowerCase().match(/iphone|ipad|android|micromessenger/i);
if (isMobile) {
var rootNode = document.querySelector('#ReactApp');
if (rootNode && !rootNode.innerHTML) {
// ready 3s 后节点内容为空,展示友好报错
setTimeout(function() {
// 插入节点前再次检查是否白屏
if (!rootNode.innerHTML) {
var html = '<div>';
html += '<h3 style="margin-top: 45%;text-align: center;">页面打不开?快来找开发 GG 帮忙</h3>';
if (window.appData && window.appData.traceId) {
html += '<p style="padding: 10px 30px;">反馈信息: ' + window.appData.traceId + '</p>';
}
html += '<p style="padding: 10px 30px;">截图或复制反馈信息到: <a target="_blank" href="https://www.yuque.com/yuque/topics/new">https://www.yuque.com/yuque/topics</a></p>'
html += '</div>';
rootNode.innerHTML = html;
}
}, 3000);
}
}
} catch (e) {
console.log(e);
}
}, false);
if ('serviceWorker' in navigator) {
if (!/[?&]enable_sw=false/.test(location.search) && window.appData && window.appData.settings.enable_serviceworker) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/serviceworker.js');
});
} else {
navigator.serviceWorker.getRegistrations().then(function(registrations) {
registrations.forEach(sw => sw.unregister());
});
}
}






window.routerBase = '/';
window.resourceBaseUrl = 'https://gw.alipayobjects.com/os/chair-script/skylark/';


window.__webpack_public_path__ = '/os/chair-script/skylark/';











!function(t,e,a,r,c){t.TracertCmdCache=t.TracertCmdCache||[],t[c]=window[c]||
{_isRenderInit:!0,call:function(){t.TracertCmdCache.push(arguments)},
start:function(t){this.call('start',t)}},t[c].l=new Date;
var n=e.createElement(a),s=e.getElementsByTagName(a)[0];
n.async=!0,n.src=r,s.parentNode.insertBefore(n,s)}
(window,document,'script','https://ur.alipay.com/tracert_a385.js','Tracert');


Tracert.start({
spmAPos: 'a385',
spmBPos: 'b4693',

role_id: '1313142',
mdata: {


group_id: appData.group.id,


book_id: appData.book.id,


doc_id: appData.doc.id,


},
});

站长统计





window.yuyanMonitor = new YuyanMonitor({
bmAppid: '589c123e2b89c03d127000da',

env: '外网',


roleId: 'laical',
});

回到 “Java”

在线用户

用户浏览此论坛: 没有注册用户 和 0 访客