敏敏张487
敏敏张487
关注数: 3
粉丝数: 16
发帖数: 225
关注贴吧数: 19
哔哩哔哩热门视频获取 ***站是很多人的快乐源,所以今天我们来实战下利用python来爬取哔哩哔哩今日热门视频。爬虫的基本思路都是差不多的,找到目标网站真实的ur地址,提取单个页面的url,保存获取到的数据,对数据进行分析。 之前有分析过哔哩哔哩,发现 B 站在一定程度上做了反爬虫机制,对访问的ua,还有ip等都进行了限制。所以在访问过程中我们需要先获取 headers 信息,并且需要加上代理ip池的辅助。实现代码如下: #! -*- encoding:utf-8 -*- import base64 import sys import random PY3 = sys.version_info[0] >= 3 def base64ify(bytes_or_str): if PY3 and isinstance(bytes_or_str, str): input_bytes = bytes_or_str.encode('utf8') else: input_bytes = bytes_or_str output_bytes = base64.urlsafe_b64encode(input_bytes) if PY3: return output_bytes.decode('ascii') else: return output_bytes class ProxyMiddleware(object): def process_request(self, request, spider): # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort) # 添加验证头 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass # 设置IP切换头(根据需求) tunnel = random.randint(1,10000) request.headers['Proxy-Tunnel'] = str(tunnel) 整个数据的获取过程比较复杂,我们主要就目标网站的反爬机制为重点给大家分享下最简单的解决方案。关于代理的选择,有需要的小伙伴可以参考这里http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.16yun.cn%2F&urlrefer=890bfe10bfd3c88c6ea9e0a56ee382bd,提供了最全的选择。 若有收获,就点个赞吧
python获取羽绒服购买指南 “加拿大鹅”因虚假广告被处罚45万元成为新闻的热点,然后网友们都直呼,加拿大鹅处罚决定书简直是羽绒服购买指南,从含绒量、充绒量、蓬松度,这些指标去选择羽绒服,可以帮助大家更好的选择羽绒服。最近不是天气已经很冷了吗,所以为了帮助大家抵御严寒,我特地爬了下京东的羽绒服数据。为啥不是天猫呢,理由很简单,滑块验证有点麻烦,而京东就不用考虑滑块的问题,对于网站反爬机制直接加代理就可以了,代理也是很简单的一种,动态转发,使用超级简单,方便,一起分享给大家参考下。 import org.apache.commons.httpclient.Credentials;import org.apache.commons.httpclient.HostConfiguration;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.UsernamePasswordCredentials;import org.apache.commons.httpclient.auth.AuthScope;import org.apache.commons.httpclient.methods.GetMethod;import java.io.IOException;public class Main { # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) private static final String PROXY_HOST = "t.16yun.cn"; private static final int PROXY_PORT = 31111; public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3"); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST, PROXY_PORT); client.getParams().setAuthenticationPreemptive(true); String username = "16ABCCKJ"; String password = "712323"; Credentials credentials = new UsernamePasswordCredentials(username, password); AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT); client.getState().setProxyCredentials(authScope, credentials); try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); System.out.println("Response = " + response); } } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } }} 从获取的数据看,大家选择羽绒服都是从价格,版型,厚度等方面去进行选择。
python学习之代理的使用 今天跟大家分享的文章主要是介绍了Python爬虫使用代理IP的实现,文中通过示例代码介绍的非常详细,可能对很多的爬虫工作者来说简直是小儿科的东西,但是对一些刚入行的小白爬虫来说还是蛮有学习价值的,有这方面需求的小伙伴跟着我一起来学习吧。 当我们在使用爬虫进行数据获取时,如果目标网站对访问的速度或次数要求较高,那么你的 IP 就很容易被封掉,也就意味着在一段时间内无法再进行下一步的工作。这时候代理的重要性就显示出来了,因为不管网站怎么封,只要你的程序一直都有新的ip去访问就可以继续进行下一步的研究。 本文除了和大家交流下代理ip的重要性以外也会向大家分享下适合新手爬虫使用的代理模式,那就是动态隧道代理,网络上有很多代理商都有提供,但是各家质量有所区别,大家根据需要实际测试为准。这里分享下普便的隧道代理的使用方式: // 要访问的目标页面string targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d";// 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b)string proxyHost = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ft.16yun.cn&urlrefer=d834d1ff518f394beeb55c530430e6e2";string proxyPort = "31111";// 代理验证信息string proxyUser = "username";string proxyPass = "password";// 设置代理服务器WebProxy proxy = new WebProxy(string.Format("{0}:{1}", proxyHost, proxyPort), true);ServicePointManager.Expect100Continue = false;var request = WebRequest.Create(targetUrl) as HttpWebRequest;request.AllowAutoRedirect = true;request.KeepAlive = true;request.Method = "GET";request.Proxy = proxy;//request.Proxy.Credentials = CredentialCache.DefaultCredentials;request.Proxy.Credentials = new System.Net.NetworkCredential(proxyUser, proxyPass);// 设置Proxy Tunnel// Random ran=new Random();// int tunnel =ran.Next(1,10000);// request.Headers.Add("Proxy-Tunnel", String.valueOf(tunnel));//request.Timeout = 20000;//request.ServicePoint.ConnectionLimit = 512;//request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36";//request.Headers.Add("Cache-Control", "max-age=0");//request.Headers.Add("DNT", "1");//String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(proxyUser + ":" + proxyPass));//request.Headers.Add("Proxy-Authorization", "Basic " + encoded);using (var response = request.GetResponse() as HttpWebResponse)using (var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){ string htmlStr = sr.ReadToEnd();} 以上就是关于爬虫中如何使用代理的示例,只是简单的分享了一部分,关于更多的我们下次再做更深的交流,以上就是本文的全部内容,希望对大家的学习有所帮助。
Selenium爬取当当畅销图书排行 之前我们分享过很多网站的爬取分析,小伙伴们都挺喜欢的,所以今天这篇文章我们分享使用Selenium来爬取当当网的畅销图书排行。正所谓书中自有黄金屋,书中自有颜如玉,我们通过读书学习来提高自身的才华,开矿我们的知识视眼。 在进行数据抓取前我们的准备工作需要做好,我们需要安装Selenium库以及Chrome浏览器,并配置好,无头浏览的的版本应该>=92。Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获得浏览器当前呈现的页面的源代码,做到可见即可爬。准备工作就完成了,下面我们正式开始抓取当当网的畅销图书排行。 数据来源于:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbook.dangdang.com%2F&urlrefer=7171e5e0daa79de7e70bcc2ae61517d3 爬虫代理来源于:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.16yun.cn%2F&urlrefer=890bfe10bfd3c88c6ea9e0a56ee382bd 接下来就是实战演练,首先,我们进入当当网的畅销图书网页,我们要利用Selenium抓取图书信息并首先,我们进入当当网的畅销图书网页,我们要利用Selenium抓取图书信息并用通过解析得到图书的排名、图片、名称、价格、评论等信息。实例代码如下: from selenium import webdriver import string import zipfile # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "16YGSDUR" proxyPass = "552465" def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http', plugin_path=None): if plugin_path is None: plugin_path = r'D:/{}_{}@t.16yun.zip'.format(proxy_username, proxy_password) manifest_json = """ { "version": "1.0.0", "manifest_version": 2, "name": "16YUN Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"22.0.0" } """ background_js = string.Template( """ var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "${scheme}", host: "${host}", port: parseInt(${port}) }, bypassList: ["foobar.com"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "${username}", password: "${password}" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: [""]}, ['blocking'] ); """ ).substitute( host=proxy_host, port=proxy_port, username=proxy_username, password=proxy_password, scheme=scheme, ) with zipfile.ZipFile(plugin_path, 'w') as zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) return plugin_path proxy_auth_plugin_path = create_proxy_auth_extension( proxy_host=proxyHost, proxy_port=proxyPort, proxy_username=proxyUser, proxy_password=proxyPass) option = webdriver.ChromeOptions() option.add_argument("--start-maximized") # 如报错 chrome-extensions # option.add_argument("--disable-extensions") option.add_extension(proxy_auth_plugin_path) # 关闭webdriver的一些标志 # option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(chrome_options=option) # 修改webdriver get属性 # script = ''' # Object.defineProperty(navigator, 'webdriver', { # get: () => undefined # }) # ''' # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script}) driver.get("http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbook.dangdang.com%2F&urlrefer=7171e5e0daa79de7e70bcc2ae61517d3") 好了,关于Python爬虫——Selenium爬取当当畅销图书排行讲到这里了,有兴趣的小伙伴可以留言交流呀!
python爬虫之公共情报搜集 经常会有很多小伙伴问,学会了python能干什么呢?那肯定很多的呀,首先是能找份不错的工作。其次你可以用它来干很多事,比如爬图片、找漏洞、找子域名、爬数据,收集情报等等。而且提取出来的数据格式非常整洁。 为什么能用来做情报搜集呢?我们今天就重点来了解下,比如我们随便提取一个网站的 URL,它会在当前目录下产生一个你测试的域名的文件夹,这里不仅仅是只有网站页面,连 CDN 文件地址都会放在这里,所以可能会发现是一个宝藏哦。很多类似项目的价值,不仅在于能够快速拉取你想要得到的数据,还在于能够构建一个很牛的情报系统(如果你技术够强的话)。因为它是能不断延伸下去的,比如从外链出发,你能找到很多和这个网站相关的讯息。例如我们可以简单的获取一些新媒体网站的数据 import org.apache.commons.httpclient.Credentials;import org.apache.commons.httpclient.HostConfiguration;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.UsernamePasswordCredentials;import org.apache.commons.httpclient.auth.AuthScope;import org.apache.commons.httpclient.methods.GetMethod;import java.io.IOException;public class Main { # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) private static final String PROXY_HOST = "t.16yun.cn"; private static final int PROXY_PORT = 31111; public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fs.weibo.com%2F&urlrefer=1fcf586e4459fe8ad6bc6dd89cdd04fd"); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST, PROXY_PORT); client.getParams().setAuthenticationPreemptive(true); String username = "16ABCCKJ"; String password = "712323"; Credentials credentials = new UsernamePasswordCredentials(username, password); AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT); client.getState().setProxyCredentials(authScope, credentials); try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); System.out.println("Response = " + response); } } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } }}HttpClient4.xJSoupJSoup全局代理ConnectionHtmlunitOkhttp 我们想下,相比于搜索引擎搜索的结果,实际上通过爬虫获取到的信息更符合是不是更符合情报的要求。而且不是所有的信息都能在搜索引擎搜索得到,而通过python爬虫,你可以顺藤摸瓜找到那些隐藏在互联网世界的它们。 试想一下,如果你搜集了很多这样的网站...然后搭建一个属于你自己的搜索引擎,这样的感觉是不是很棒?
#要访问的目标https页面# 利用爬虫技术清理微博“僵尸粉” 最近朋友告诉我她的微博粉丝数涨了很多,好奇的我去翻看了下,看了下动态也没有发现她发了什么能能快速吸粉的内容呀。粉丝怎么一下涨那么多,我也是一直在玩微博的,但是确实很少涨粉,粉丝基本都是一些认识的朋友,除非是“僵尸粉”。微博里的僵尸粉超级多的,很多人花钱就可以买到“关注”,有名无实的微博粉丝,是由系统自动产生的恶意注册的用户,不过大家应该都不喜欢有很多僵尸粉吧,毕竟都希望粉丝是真实的。 说的僵尸粉我就想到那些明星,动不动就是百万千万的粉丝,真的好奇喜欢他们的人到底有多少,又有多少是僵尸粉呢?关于微博的数据之前也采集过不少,但是关于粉丝这个没有研究过。一般要检测粉丝到底是不是僵尸粉,可以通过粉丝的粉丝数量、微博动态数这些数据去分析,那么我们今天就通过朋友的微博去检测下,流程不难,篇幅有点多,而且关于微博最近真的风控的也很烦,所以我还买了付费代理才获取到数据。获取到的粉丝url: url_fans = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fweibo.com%2F7399148775%2Ffans%3Ffrom%3D100505%26wvr%3D6%26mod%3Dheadfans%C2%A4t%3Dfans%23place&urlrefer=4057c57d60e4cf24f4fc9059386bb2af"大体的代码信息如下,因为是挂了代理的,所以重点分享下挂代理的部分 import java.io.IOException;import java.net.Authenticator;import java.net.InetSocketAddress;import java.net.PasswordAuthentication;import java.net.Proxy;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;public class Demo{ // 代理验证信息 final static String ProxyUser = "16EDEWIU"; final static String ProxyPass = "205517d"; // 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) final static String ProxyHost = "t.16yun.cn"; final static Integer ProxyPort = 31111; // 设置IP切换头 final static String ProxyHeadKey = "Proxy-Tunnel"; public static String getUrlProxyContent(String url) { Authenticator.setDefault(new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(ProxyUser, ProxyPass.toCharArray()); } }); // 设置Proxy-Tunnel Random random = new Random(); int tunnel = random.nextInt(10000); String ProxyHeadVal = String.valueOf(tunnel); Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ProxyHost, ProxyPort)); try { // 处理异常、其他参数 Document doc = Jsoup.connect(url).timeout(3000).header(ProxyHeadKey, ProxyHeadVal).proxy(proxy).get(); if(doc != null) { System.out.println(doc.body().html()); } } catch (IOException e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { // 要访问的目标页面 String targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fweibo.com%2F7399148775%2Ffans%3Ffrom%3D100505%26wvr%3D6%26mod%3Dheadfans%C2%A4t%3Dfans%23place&urlrefer=4057c57d60e4cf24f4fc9059386bb2af"; getUrlProxyContent(targetUrl); }} 通过获取到的数据分析大概是这样的,有些僵尸粉是广告营销的,有些是转发别人的,还有一些就是真的僵尸粉,最让我震惊的是朋友一千多的粉丝结果只有200个是正常的,这打击有点大呀。还有就是如果你的有收到官博发一些涨粉的消息,那你一定要注意了吗,说不定一大堆僵尸粉即将来袭。还有通过这次的数据分析我们可以想象,那些号称几千万粉丝的明星实际的粉丝估计也就那样。最后写文不易,欢迎大家来点赞交流哦。
有做爬虫技术好的吗? 有数据需要采集,爬虫技术好的来私聊2221256510
通过爬虫获取全国火锅店数量 在我们身边经常流行这么一句话,没有什么是一顿火锅解决不了的事情,如果有,那就两顿。那么今天就教大家如何获取全国不同城市火锅店数量情况,以更加直观的方式去了解不同城市的火锅店分布情况。一起来关注下你所在的城市火锅店数量多不多呀。 本文数据的数据来源我们是通过百度地图,通过python技术知识去获取数据并进行分析。 数据来源:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fmap.baidu.com%2F&urlrefer=6ba51bf348cea3549f5788fc0f97aa40 爬虫代理来源:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.16yun.cn%2F&urlrefer=890bfe10bfd3c88c6ea9e0a56ee382bd 在对网页分析好之后,接下来可以借助Python技术进行获取数据,代理示例如下: #! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fmap.baidu.com%2F&urlrefer=6ba51bf348cea3549f5788fc0f97aa40" # 要访问的目标HTTPS页面 # targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fmap.baidu.com%2F&urlrefer=6ba51bf348cea3549f5788fc0f97aa40" # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "16MVUEFE" proxyPass = "102663" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(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从火锅数量来看,除了第二名成都,其余城市火锅店数量与第一名的重庆差距较大。以上的数据分享不够深入,更多的大家可以一起讨论学习。最后我表示生活在大成都的我一个月起码是要吃2次火锅的,你们呢?
通过爬虫获取全国火锅店数量 在我们身边经常流行这么一句话,没有什么是一顿火锅解决不了的事情,如果有,那就两顿。那么今天就教大家如何获取全国不同城市火锅店数量情况,以更加直观的方式去了解不同城市的火锅店分布情况。一起来关注下你所在的城市火锅店数量多不多呀。 本文数据的数据来源我们是通过百度地图,通过python技术知识去获取数据并进行分析。 数据来源:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fmap.baidu.com%2F&urlrefer=6ba51bf348cea3549f5788fc0f97aa40 爬虫代理来源:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.16yun.cn%2F&urlrefer=890bfe10bfd3c88c6ea9e0a56ee382bd 在对网页分析好之后,接下来可以借助Python技术进行获取数据,代理示例如下: #! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fmap.baidu.com%2F&urlrefer=6ba51bf348cea3549f5788fc0f97aa40" # 要访问的目标HTTPS页面 # targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fmap.baidu.com%2F&urlrefer=6ba51bf348cea3549f5788fc0f97aa40" # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "16MVUEFE" proxyPass = "102663" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(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从火锅数量来看,除了第二名成都,其余城市火锅店数量与第一名的重庆差距较大。以上的数据分享不够深入,更多的大家可以一起讨论学习。最后我表示生活在大成都的我一个月起码是要吃2次火锅的,你们呢?
如何解决爬虫程序返回429 作为爬虫,在采集数据的过程中我们会遇到很多的状态码,不同的状态码代表不同的意思。那么我们今天就重点来了解下爬虫程序返回429意味着什么? 我们就以淘宝为例进行分析,淘宝的反爬机制大家都懂,不是一般的严格,挂代理是最基本的要求。但是也需要配合更多的反爬策略一起进行才能有理想的效果。我们先来展示下访问淘宝的代码示例。 import org.apache.commons.httpclient.Credentials;import org.apache.commons.httpclient.HostConfiguration;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.UsernamePasswordCredentials;import org.apache.commons.httpclient.auth.AuthScope;import org.apache.commons.httpclient.methods.GetMethod;import java.io.IOException;public class Main { # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) private static final String PROXY_HOST = "u6887.b70.tp.16yun"; private static final int PROXY_PORT = 31111; public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.taobao.com%2F&urlrefer=b3c94e3854df35b8e1277c692dabfee5"); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST, PROXY_PORT); client.getParams().setAuthenticationPreemptive(true); String username = "16ABCCKJ"; String password = "712323"; Credentials credentials = new UsernamePasswordCredentials(username, password); AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT); client.getState().setProxyCredentials(authScope, credentials); try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); System.out.println("Response = " + response); } } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } }}HttpClient4.xJSoupJSoup全局代理ConnectionHtmlunitOkhttp 在我们挂上代理访问淘宝的时候就返回了超级多的429, 虽然我们挂的代理高达80并发但是请求还是比较多,超出了并发量,所以几乎都是返回的429。 这是HTTP\HTTPS的标准应答模式 ,面对这样的情况我们只有降低程序的并发请求,或者增加更大的并发量。如果不改变就会导致代理通道堵塞,访问的效果就会更差。
通过python选择美食店 在我们日常生活中,当需要寻找美食的时候,通常都是通过美团、大众点评搜索,然后看下大家的评论,然后再决定是否选择这家店。这对我们来说是比较方面省时的。 之前接过一个单子就是需要采集大众点评商家评论的,今天我们就拿来分享交流下。一般这样的网站反爬策略都是很严的,如果爬虫技术不行,或者反爬策略做的不够好是没法采集到数据的。因为大众点评的反爬措施,需要设置IP代理以及随机切换可用的User-Agent来进行大量数据的爬取。说到代理这里就分享下,我之前使用的是亿牛云的爬虫代理,因为要采集这个网站,他们还免费给我提供了一份ua库,用过市面上不少的代理,只有他们家站在客户的角度考虑,希望客户能更好的采集数据,这点真的是很赞的。 关于采集大众点评的完整代码如下: """Version: Python3.5"""import reimport timeimport requestsfrom lxml import etreefrom fake_useragent import UserAgentclass DianPing: def __init__(self): self.url = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.dianping.com%2Fwuhan%2Fch10&urlrefer=aab6017705df4127fd8bf943a89b72cf" self.ua = UserAgent() self.headers = { "Cookie": "s_ViewType=10; _lxsdk_cuid=167ca93f5c2c8-0c73da94a9dd08-68151275-1fa400-167ca93f5c2c8; _lxsdk=167ca93f5c2c8-0c73da94a9dd08-68151275-1fa400-167ca93f5c2c8; _hc.v=232064fb-c9a6-d4e0-cc6b-d6303e5eed9b.1545291954; cy=16; cye=wuhan; td_cookie=686763714; _lxsdk_s=%7C%7CNaN", "User-Agent": self.ua.random # 获取随机的User-Agent } self.dic = {} # class-digit字典 def get_page(self): res = requests.get(self.url, headers=self.headers) s = etree.HTML(res.text) title_list = s.xpath('//*[@id="shop-all-list"]/ul/li/div[2]/div[1]/a[1]/@title') # 标题 dish_list = [] # 招牌菜 if len(title_list): self.get_dict(res.text) for i in range(len(title_list)): dish_list.append(s.xpath('//*[@id="shop-all-list"]/ul/li[{}]/div[2]/div[4]/a/text()'.format(i + 1))[0]) score1_list = self.get_score(res.text, len(title_list), 1) # 口味评分 score2_list = self.get_score(res.text, len(title_list), 2) # 环境评分 score3_list = self.get_score(res.text, len(title_list), 3) # 服务评分 for i in range(len(title_list)): info = { "店名": title_list[i], "口味评分": score1_list[i], "环境评分": score2_list[i], "服务评分": score3_list[i], "招牌菜": dish_list[i] } print(info) else: print("Error!") def get_dict(self, html): # 提取css文件的url css_url = "http:" + re.search('(//.+svgtextcss.+\.css)', html).group() css_res = requests.get(css_url) # 这一步得到的列表内容为css中class的名字及其对应的偏移量 css_list = re.findall('(un\w+){background:(.+)px (.+)px;', '\n'.join(css_res.text.split('}'))) # 过滤掉匹配错误的内容,并对y方向上的偏移量初步处理 css_list = [[i[0], i[1], abs(float(i[2]))] for i in css_list if len(i[0]) == 5] # y_list表示在y方向上的偏移量,完成排序和去重 y_list = [i[2] for i in css_list] y_list = sorted(list(set(y_list))) # 生成一个字典 y_dict = {y_list[i]: i for i in range(len(y_list))} # 提取svg图片的url svg_url = "http:" + re.findall('class\^="un".+(//.+svgtextcss.+\.svg)', '\n'.join(css_res.text.split('}')))[0] svg_res = requests.get(svg_url) # 得到svg图片中的所有数字 digits_list = re.findall('>(\d+)<', svg_res.text) for i in css_list: # index表示x方向上的索引(最小的索引值是0) index = int((float(i[1]) + 7) / -12) self.dic[i[0]] = digits_list[y_dict[i[2]]][index] def get_score(self, html, l, x): """ :param html: 网页源码 :param l: 迭代长度 :param x: 1或2或3 :return: 评分列表 """ s = etree.HTML(html) num_list = [] for i in range(l): t = s.xpath('//*[@id="shop-all-list"]/ul/li[{}]/div[2]/span/span[{}]/b/text()'.format(i + 1, x))[0] c = s.xpath('//*[@id="shop-all-list"]/ul/li[{}]/div[2]/span/span[{}]/b/span/@class'.format(i + 1, x)) num = self.dic[c[0]] + '.' + self.dic[c[1]] if t == '.' else self.dic[c[0]] + '.1' num_list.append(num) return num_listif __name__ == '__main__': dp = DianPing() dp.get_page() 以上只是简单的一些分享,如果有更好的方法大家可以留言交流。
你看过高考满分作文吗? “高考”今天上映,历经十余载苦读、三年奋斗,1078万高考生今天将踏进考场,愿每个少年的你厚积薄发、跃马扬鞭、执笔考场、光芒万丈! 上午高考作文主题出炉后迅速成为大家纷纷讨论的热点。“可为与有为”、“理想”等,我们发现这些主题都有关于理想主义和家国情怀,都是很正面的旋律。好期待今年的满分作文会写的多精彩。每年高考都会有满分作文出现,看过那些满分作文的我们都会赞叹文笔真好。那么今天我们就用python一本正经的分析下历年高考的满分作文,高考满分作文的首页链接为http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.zuowen.com%2Fgaokaozw%2Fmanfen%2Findex.shtml&urlrefer=00729a038304c4679a1479442adca4d9完整代码如下: #! -*- encoding:utf-8 -*- import requests import random import requests.adapters # 要访问的目标页面 targetUrlList = [ "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.zuowen.com&urlrefer=a9e7c0932be19923f69e84fc0bf20df7", "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.zuowen.com&urlrefer=a9e7c0932be19923f69e84fc0bf20df7", "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.zuowen.com&urlrefer=a9e7c0932be19923f69e84fc0bf20df7", ] # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "16QEPNLQ" proxyPass = "098333" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(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)} class HTTPAdapter(requests.adapters.HTTPAdapter): def proxy_headers(self, proxy): headers = super(HTTPAdapter, self).proxy_headers(proxy) if hasattr(self, 'tunnel'): headers['Proxy-Tunnel'] = self.tunnel return headers # 访问三次网站,使用相同的tunnel标志,均能够保持相同的外网IP for i in range(3): s = requests.session() a = HTTPAdapter() # 设置IP切换头 a.tunnel = tunnel s.mount('https://', a) for url in targetUrlList: r = s.get(url, proxies=proxies) print r.text
通过数据分析哪些国家有钱人比较多 5月24日,据福布斯报道显示,截至目前,亚马逊的杰夫·贝佐斯依然是世界首富,而lv老板暂时位居福布斯世界富豪榜第二。虽然不是第一,但是感觉奢侈品大佬有一半收入都是中国人贡献的,果然大牌还是厉害啊。 今天我们就通过爬虫实战分析下福布斯世界首富榜,看下那些国家的有钱人多,那些行业比较产有钱人。开始一个数据分析项目,首先需要做的就是get到原始数据,那我们就通过php来获取数据然后进行分析。完整代码如下: <?php // 要访问的目标页面 $url = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d"; $urls = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3"; // 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) define("PROXY_SERVER", "tcp://t.16yun.cn:31111"); // 代理身份信息 define("PROXY_USER", "username"); define("PROXY_PASS", "password"); $proxyAuth = base64_encode(PROXY_USER . ":" . PROXY_PASS); // 设置 Proxy tunnel $tunnel = rand(1,10000); $headers = implode("\r\n", [ "Proxy-Authorization: Basic {$proxyAuth}", "Proxy-Tunnel: ${tunnel}", ]); $sniServer = parse_url($urls, PHP_URL_HOST); $options = [ "http" => [ "proxy" => PROXY_SERVER, "header" => $headers, "method" => "GET", 'request_fulluri' => true, ], 'ssl' => array( 'SNI_enabled' => true, // Disable SNI for https over http proxies 'SNI_server_name' => $sniServer ) ]; print($url); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); var_dump($result); // 访问 HTTPS 页面 print($urls); $context = stream_context_create($options); $result = file_get_contents($urls, false, $context); var_dump($result);?>
你所不知道的爆文知识 你们有没有这遇到这样的情况,每当看到几十万的阅读量的文章之后区区几个评论, 心中就在想, 难道大家现在都这么懒了吗? 而有些文章阅读量不高, 评论却很多? 我想这些应该都是刷的, 不光浏览量是刷的, 甚至那些无厘头的评论都是刷的。有人要问了, 你凭什么说别人是刷的评论呢? 难道评论还可以刷? 我想说是的。 比如:我们在浏览微博的时候,会经常发现一件事, 怎么每个微博下面都有这个人的小广告呢? 难道这人都这么闲吗? 一个人闲也就罢了, 怎么这么多人都闲?可以在大量的微博下面评论大量的小广告, 并且点赞还非常多。所以类似这样的是不是刷的,大家可以自己去判断咯。 那么要刷这么高的阅读量和评论必不可少的就是代理ip的辅助,给大家推荐一个网站http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b 接下来我们使用代理去刷新网页,使用的是java import org.apache.commons.httpclient.Credentials;import org.apache.commons.httpclient.HostConfiguration;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.UsernamePasswordCredentials;import org.apache.commons.httpclient.auth.AuthScope;import org.apache.commons.httpclient.methods.GetMethod;import java.io.IOException;public class Main { # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) private static final String PROXY_HOST = "t.16yun.cn"; private static final int PROXY_PORT = 31111; public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3"); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST, PROXY_PORT); client.getParams().setAuthenticationPreemptive(true); String username = "16ABCCKJ"; String password = "712323"; Credentials credentials = new UsernamePasswordCredentials(username, password); AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT); client.getState().setProxyCredentials(authScope, credentials); try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); System.out.println("Response = " + response); } } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } }}HttpClient4.xJSoupJSoup全局代理ConnectionHtmlunitOkhttp
代理ip对新媒体运营的重要性 自从微信公众号那句“再小的个体,也有自己的品牌”在互联网营销中打响,快手、抖音、小红书等平台如同雨后春笋般崛起。新媒体的迅速崛起使每个人都有机会成为KOL的时代,那么代理IP是如何能够起到推进作用的呢? 随着新媒体运营行业的人群越来越多,很多人看到了其中蕴含着的商机,但是实际操作起来却是非常不容易的。想要将新媒体运营好,需要让自己运营的媒体号更有特色,能吸引到更多数量的粉丝,这样才能在运营一段时间后为自己带来收益变现。 这看似简单,但其实吸引粉丝的过程是非常艰难的。比如很多新媒体运营工作者会通过不断的发帖去吸引粉丝,但这些帖子一般都具有时效性,针对当前热门的话题,或者有话题性的人物。这种类型的帖子收益还是比较高的,但是一旦被网站发现是具有广告性质的,都会被删掉甚至封号。 同时,很多新媒体人员发现,常用同一个IP地址发表同类型的帖子,注册不同的账号,很多网站甚至会将这个IP直接封掉。而这种时候,就恰恰是代理IP派上用场的时候了。代理IP可以为新媒体从业人员提供海量的IP地址,这样新媒体人员就可以通过使用代理IP完成种种营销操作,也不用担心被封。 亿牛云代理成为众多新媒体不可缺少的辅助工具,和他自身的性价比是分不开的。价格划算套餐多样化,能最大程度满足不同需求,这种代理服务自然会受到越来越多新媒体的欢迎。
如何应对爬虫请求频繁 相信很多爬虫工作者在进行数据爬取过程中经常会遇到“您的请求太过频繁,请稍后再试”,这个时候心里莫名的慌和烦躁、明明爬虫代码也没有问题啊,怎么突然爬不动了呢?那么,很有可能,你的爬虫被识破了,这只是友好的提醒,如果不降低请求就会拉黑你的ip了。 我们都知道遇到这种情况使用代理就解决了,用代理IP确实不失为一个解决问题的好办法。IP被封了就换新IP继续爬,或者用很多IP同时多线程爬,都很给力的。但是有时候没有爬多久又被提示“您的请求太过频繁,请稍后再试”。再换IP还是被封,再换再封,封的越来越快,效率非常低下,这是为什么呢? 那是因为,你用的代理IP凑巧也是别人用来访问相同的网站的,而且用的还比较频繁。可能你们使用了共享ip池,或者使用的代理ip池很小。所以我们在找代理IP的时候,在保证IP有效率的同时IP池越大越好的,这样可以保证IP的新鲜度。例如亿牛云...列如还有的在使用代理的过程中也出现这样的情况。HTTP\HTTPS代理,系统会返回429 Too Many Requests;但不会对爬虫的运行产生影响,爬虫会根据返回结果自动重新发起请求,这是HTTP\HTTPS的标准应答模式。 所以,当您遇到“您的请求太过频繁,请稍后再试”时,不要慌,要镇定,检查下自己的爬虫策略,是否真的访问太过频繁,检查下自己的代理IP是否真的比较干净,调整自己的策略,选择更加纯净的IP,就能有效的避免这个错误了
#要访问的目标https页面# HTTP隧道与Proxy-Tunnel技术 式去获取代理然后使用,这样的方式对我们的好处就是可以自己管理ip池。最近很多厂商都提供了一种新的模式,隧道代理。这种隧道代理有个很特别的就是使得客户端感觉不到代理的存在,在客户端看来,它是直接跟要请求的资源服务器在通信。对于我们很多新手来说是不错的方式,不需要花很多的时间去和代理纠结。 在使用隧道HTTP过着中涉及ip的两种模式,即Proxy-Tunnel自主切换IP,该模式适合一些需要登陆、Cookie缓存处理等爬虫需要精确控制IP切换时机的业务。 爬虫程序可以通过设置HTTP头Proxy-Tunnel: 随机数, 当随机数相同时,访问目标网站的代理IP相同。比如: 需要登录,获取数据两个请求在一个IP下,只需对这组请求设置相同Proxy-Tunnel,例如:Proxy-Tunnel: 12345, 该组请求在代理有效期内使用相同的代理IP。但是需要注意的是同一时间不同请求组可以设置不同Proxy-Tunnel: 随机数,并发完成数据爬取。
有需要代理ip的吗? 提供高质量短视频刷量代理ip,免费测试 需要的私聊 2852818720
有需要代理ip吗的? 高质量代理ip有需要的可以私聊,免费测试 2852818720
短视频采集方法(一) 近2年随着抖音等短视频的爆火,直播带货和直播电商越来越火。那么对于短视频企业的运营者来说数据就成了最最关键的需求。因此在抖音等短视频上公开抓取相应数据就成为了很多爬虫者的工作。而我们公司也因为一些业务需求需要数据,基于此,我下载抖音,开始研究它的HTTP请求内容,后来我发现它有毒,越刷越上瘾,总感觉下一个视频一定会更精彩,根本停不下来,似乎早已忘记当初为什么下载抖音...当然,最后我还是控制着了。 关于app的抓包有很多的方式,而且也不难,但是这些端视频网站也是有个不好的地方就是封ip,虽然对我们这些爬虫来说也不是什么大的阻碍,解决也很简单网上那么多代理商找一家合适的购买使用就可以了,像我一直使用的亿牛云。采集短视频某个特定的内容比如绝地求生,我们只需要在APP上进行挑战的内容搜索,例如搜索“绝地求生”,我们找到接口然后进行采集和数据的分析。 关于具体的采集步骤我会在以后的文章中进行分享。
URL请求中的HTTP协议分析 URL请求过程中,浏览器或程序会按照标准的HTTP协议进行处理,下面以百度访问为例,我们可以用curl -v http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.baidu.com+&urlrefer=d2ed7a76769b8d648a32e9508653ad95来分析,会发现总共有4个处理阶段。 1、域名解析服务器IP * Rebuilt URL to: http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.baidu.com%2F%2A++&urlrefer=7df53367f7349b7653011f4392f41de5 Trying 14.215.177.38... 通过域名解析获取服务器ip地址,原理和 nslookup http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.baidu.com&urlrefer=d04a537000146ae20785a6d0d3533551相同,dns服务器返回两个IP地址,然后随机选用服务器IP访问。 2、SSL协商请求处理 * Connected to http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.baidu.com&urlrefer=d04a537000146ae20785a6d0d3533551 (14.215.177.38) port 443 (#0) 通过443端口进行https加密协议处理。 3、根据URL向服务器发起请求 > GET / HTTP/1.1 > Host: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.baidu.com&urlrefer=d04a537000146ae20785a6d0d3533551 > User-Agent: curl/7.54.0 网站会检查当前请求的类型,例如是不是浏览器访问及其版本等。User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.1276.73 Safari/537.36,就是一个标准的浏览器标示。 4、服务器响应请求,发回网页内容 < HTTP/1.1 200 OK < Connection: keep-alive < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ < <!DOCTYPE html>...</html> 服务器响应终端请求,同时返回cookie来标识用户,终端如果接受并使用该cookie继续访问,服务器会认为终端是一个已标识的正常用户,可以获取需要的相关数据啦。
主流动态代理IP产品的区别 1、API提取式代理 通过URL获取代理IP信息,格式一般是IP:PORT,需验证IP的可用性、更换代理设置,同时需要设计多线程异步IO,实现代理IP并发处理,不仅繁琐,而且影响效率,可以自建IP池控制。 2、本地转发代理 通过软件将代理信息提取本地,然后进行进程或全局代理,由于其技术框架没法实现云代理IP的自动海量IP池管理及负载均衡保障,只能将转发IP提交终端软件,由该软件通过多线程切换实现HTTP请求的转发,导致爬虫框架复杂难以维护,同时IP切换效率低下,IP失效率较高。 3、爬虫代理 通过固定云代理服务地址,建立专线网络链接,代理平台自动实现海量IP池管理及负载均衡,实时无感的毫秒级代理IP切换,提供企业级云服务的网络稳定性及请求响应速度,同时降低了客户端运算负载压力,避免了爬虫客户在代理IP策略优化上投入精力,整体提升了爬虫效率。
爬虫代理的数据缓存及网络延迟 为了提高客户的爬虫采集效率,降低目标服务器的反爬风险,一般爬虫代理关闭了目标服务器的缓存特性,每一次用户请求都真实进行转发,避免了服务器或防火墙因为反爬而出现的返回缓存数据,从而导致采集数据失真的情况。 当研发进行爬虫代理对比测试的时候,可能会发现一个现象,有一些爬虫代理每次请求的延迟都很稳定,而另外一部分爬虫代理产品会出现第一次HTTP请求延迟很高,接下来大量的请求延迟非常低(甚至低于服务器响应时间)的假象,如下图上图的情况就是这类代理服务器缓存了数据,然后爬虫程序请求相同链接的时候,会出现重复数据并且延迟很低的情况,这种情况下爬虫程序难以分辨是不是目标服务器反爬策略引起的,并且会给用户造成一种代理服务器网络延迟低的假象。因此一定要选择关闭了目标服务器缓存特性的爬虫代理产品。
代理使用过程中Keep-Alive保持IP不变 在使用爬虫代理的过程中,由于该产品是自动转发代理,按照每个http请求随机分配一个代理ip的模式进行转发,会导致多个Session的请求ip不一致,如果目标网站进行了判断会按照爬虫限制请求,尤其是一些反爬较多的网站,会出现大量的请求错误。 在使用过程中,通过为requests.session()进行对象锁定,能够让所有的Session保持相同的外网IP,从而快速进行数据采集。注意代理产品的IP有效时间,在代理IP到期之前,必须结束所有的请求,才能保证Session的完整性。另外需要分析目标网站的数据请求,如果需要可以在外网IP的同时,进行cookie的设置。以我最近的项目代理使用部分如下: #! -- encoding:utf-8 -- import requests import random import requests.adapters # 要访问的目标页面 targetUrlList = [ "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3", "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fheaders&urlrefer=8051c53e140123474ccefe2df0b8fdce", "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fuser-agent&urlrefer=0e98a10855163bc482e7a65c3c412e09", ] # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(user)s:%(pass)s@%(host)s:%(port)s" % { "host": proxyHost, "port": proxyPort, "user": proxyUser, "pass": proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "http": proxyMeta, "https": proxyMeta, } # 访问三次网站,使用相同的Session(keep-alive),均能够保持相同的外网IP s = requests.session() # 设置cookie # cookie_dict = {"JSESSION":"123456789"} # cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) # s.cookies = cookies for i in range(3): for url in targetUrlList: r = s.get(url, proxies=proxies) print r.text
爬虫程序十分钟入门 经常有前端的程序员被公司临时要求做数据收集,针对某项目进行分析评估。如何才能快速的实现数据采集目标,同时减少程序的研发和运维工作,现在给大家推荐一个基本爬虫策略+爬虫代理IP的方案,从搭建项目到实现数据采集,10分钟时间就够啦,主要分成三个步骤: 1、选择适合的语言框架,一般建议python或java这类面向对象封装较多的语言,根据熟悉程度选择适合的类库使用,例如python下的requests、scrapy或java下的HttpClient、JSoup等。 2、爬虫程序对http的header添加User-Agent,避免被网站反爬统计。除非是访问网站或APP专用数据api接口,正常的HTTP请求都需要进行ua(User-Agent)优化,因为ua是浏览器标识,如果http请求没有ua,或ua太少,都会被网站运维统计异常的,ua越丰富分布就越真实。 3、选择适合的爬虫代理,直接参考demo配置使用即可,以市面上典型的一款爬虫代理产品为例,只需要查看对方的demo,提取代理信息,将目标网站修改成需要采集数据url即可。
永久可用的代理IP 建议要参加这类项目的朋友擦亮眼睛,如果有一次缴费,永久可以使用的代理IP,就可以确认是骗局的了,因为长期运营是需要成本投入的。
采集数据的html解析方法 通过爬虫请求url一般会获取html数据,需要快捷进行文档解析,定位获取元素数据。Beautiful Soup 能够从HTML或XML文件中提取数据的Python库.可以通过转换器实现惯用的文档导航,查找,修改文档的方法。Beautiful Soup会极大的提高文档分析效率,减少研发的投入时间。 下面将展示BeautifulSoup4中所有主要特性,表明它适合做什么,如何工作和使用,并到达想要的效果和处理异常情况. html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Felsie&urlrefer=9fa5e92f6bab7feef213cc281967ea24" class="sister" id="link1">Elsie</a>, <a href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Flacie&urlrefer=06a62409505a29557bece1c201e4c252" class="sister" id="link2">Lacie</a> and <a href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Ftillie&urlrefer=11637573d3c585b6a2749bc4054afd89" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ 使用BeautifulSoup解析这段html,能够获取BeautifulSoup 的对象,并能按照标准的格式结构输出: from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc) print(soup.prettify()) # <html> # <head> # <title> # The Dormouse's story # </title> # </head> # <body> # <p class="title"> # <b> # The Dormouse's story # </b> # </p> # <p class="story"> # Once upon a time there were three little sisters; and their names were # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Felsie&urlrefer=9fa5e92f6bab7feef213cc281967ea24" id="link1"> # Elsie # </a> # , # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Flacie&urlrefer=06a62409505a29557bece1c201e4c252" id="link2"> # Lacie # </a> # and # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Ftillie&urlrefer=11637573d3c585b6a2749bc4054afd89" id="link2"> # Tillie # </a> # ; and they lived at the bottom of a well. # </p> # <p class="story"> # ... # </p> # </body> # </html> 一些浏览结构化数据的方法: soup.title # <title>The Dormouse's story</title> soup.title.name # u'title' soup.title.string # u'The Dormouse's story' soup.title.parent.name # u'head' soup.p # <p class="title"><b>The Dormouse's story</b></p> soup.p['class'] # u'title' soup.a # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Felsie&urlrefer=9fa5e92f6bab7feef213cc281967ea24" id="link1">Elsie</a> soup.find_all('a') # [<a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Felsie&urlrefer=9fa5e92f6bab7feef213cc281967ea24" id="link1">Elsie</a>, # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Flacie&urlrefer=06a62409505a29557bece1c201e4c252" id="link2">Lacie</a>, # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Ftillie&urlrefer=11637573d3c585b6a2749bc4054afd89" id="link3">Tillie</a>] soup.find(id="link3") # <a class="sister" href="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Ftillie&urlrefer=11637573d3c585b6a2749bc4054afd89" id="link3">Tillie</a> 从文档中找到所有特定字符<a>标签的链接: for link in soup.find_all('a'): print(link.get('href')) # http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Felsie&urlrefer=9fa5e92f6bab7feef213cc281967ea24 # http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Flacie&urlrefer=06a62409505a29557bece1c201e4c252 # http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Ftillie&urlrefer=11637573d3c585b6a2749bc4054afd89 从文档中获取文本文字内容: print(soup.get_text()) # The Dormouse's story # # The Dormouse's story # # Once upon a time there were three little sisters; and their names were # Elsie, # Lacie and # Tillie; # and they lived at the bottom of a well. # # ...
HtmlUnit测试单元做爬虫 前端有时候会遇到项目临时需要网上收集数据的情况,什么方案是简单易懂、长期可用的呢,当然是用浏览器终端测试单元做爬虫是最方便的啦,将平时工作中的测试程序进行简单的修改,然后配合爬虫代理,就可以马上开始数据采集,是不是很方便呀。 HtmlUnit是java下的一款无头浏览器方案,通过相应的API模拟HTML协议,可以请求页面,提交表单,打开链接等等操作,完全模拟用户终端。支持复杂的JavaScript、AJAX库,可以模拟多种浏览器,包括Chrome,Firefox或IE等。 下面提供一个简单的demo,通过调用爬虫代理访问IP查询网站,如果将目标网站修改为需要采集的数据链接,即可获取相应的数据,再加上数据分析模块就可以基本使用,示例如下: package htmlunit; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlunitDemo { // 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) final static String proxyHost = "t.16yun.cn"; final static Integer proxyPort = 31111; // 代理验证信息 final static String proxyUser = "USERNAME"; final static String proxyPass = "PASSWORD"; public static void main(String[] args) { CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(proxyHost, proxyPort), new UsernamePasswordCredentials(proxyUser, proxyPass)); WebClient webClient = new WebClient(BrowserVersion.CHROME,proxyHost, proxyPort); webClient.setCredentialsProvider(credsProvider); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setActiveXNative(false); webClient.getOptions().setCssEnabled(false); HtmlPage page = null; try { page = webClient.getPage("http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d"); } catch (Exception e) { e.printStackTrace(); } finally { webClient.close(); } webClient.waitForBackgroundJavaScript(30000); String pageXml = page.asXml(); System.out.println(pageXml); } }
Selenium爬虫注意事项 部分网站反爬策略较严,一般的爬虫程序不能及时采集数据。如果进行网站反爬策略分析,需要研发投入大量的时间和精力,因此使用Selenium模拟用户浏览器进行数据访问,快速实现数据采集是较好的方案。 但是Selenium爬虫在实际的部署中,需要规避一些常见的问题,才能实现稳定持续的数据采集,包括: 1、开发模式 设置为开发者模式,防止被各大网站识别出来使用了Selenium from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation'])#开启实验性功能 browser=webdriver.Chrome(options=option) # 修改get方法 script = ''' Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) ''' browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script}) 2、登录生成Cookie 如果版本不符合,会导致运行失败,因此推荐安装chrome和对应driver: 下载chrome对应版本的chrome deriver 下载chrome http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.google.com%2Fchrome%2F&urlrefer=417b926b00d46c2d1e83d905c902fef9 下载对应版本 driver http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fchromedriver.chromium.org%2Fdownloads&urlrefer=17442b90458de19519d626e51c1c3444 3、爬虫代理选择 为了避免目标网站访问频繁,必须配置爬虫代理。由于Selenium调用浏览器,需要稳定的网络连接、较低的延迟和较高的并发,因此建议使用隧道转发代理IP,目前市面上大部分的隧道转发代理产品,都需要代码写入用户名和密码的认证方式,代码参考如下 from selenium import webdriver import string import zipfile # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http', plugin_path=None): if plugin_path is None: plugin_path = r'D:/{}_{}@t.16yun.zip'.format(proxy_username, proxy_password) manifest_json = """ { "version": "1.0.0", "manifest_version": 2, "name": "16YUN Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"22.0.0" } """ background_js = string.Template( """ var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "${scheme}", host: "${host}", port: parseInt(${port}) }, bypassList: ["foobar.com"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "${username}", password: "${password}" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: [""]}, ['blocking'] ); """ ).substitute( host=proxy_host, port=proxy_port, username=proxy_username, password=proxy_password, scheme=scheme, ) with zipfile.ZipFile(plugin_path, 'w') as zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) return plugin_path proxy_auth_plugin_path = create_proxy_auth_extension( proxy_host=proxyHost, proxy_port=proxyPort, proxy_username=proxyUser, proxy_password=proxyPass) option = webdriver.ChromeOptions() option.add_argument("--start-maximized") # 如报错 chrome-extensions # option.add_argument("--disable-extensions") option.add_extension(proxy_auth_plugin_path) # 关闭webdriver的一些标志 # option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(chrome_options=option) # 修改webdriver get属性 # script = ''' # Object.defineProperty(navigator, 'webdriver', { # get: () => undefined # }) # ''' # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script}) driver.get("http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d") 请注意plugin_path中的r'D:/{}_{}@t.16yun.zip'是存放代理认证信息的临时目录和文件,可根据本地的文件目录权限进行动态配置,否则读取失败会导致程序每次运行的时候,都提示要求手动输入用户名和密码认证信息的问题。
爬虫程序优化要点 爬虫程序一般分成数据采集模块、数据分析模块和反爬策略模块,如果能针对这三个模块进行优化,可以让爬虫程序稳定持续的运行。 1.采集模块 一般来说目标服务器会提供多种接口,包括url、app或者数据api,研发人员需要根据采集数据难度、每天数据量要求、目标服务器反爬限制频率分别进行测试,选择适合的采集接口及方式。 2.数据分析模块 由于网络采集存在各种不确定性,数据分析部分在根据需要做好数据解析之后,要做好异常处理及定位重启功能,避免出现程序异常退出或者数据采集遗漏、重复的情况 3.反爬策略模块 分析目标服务器的爬虫策略,控制爬虫请求频率甚至包括验证码、加密数据的破解,同时使用优质代理或爬虫代理,寻找业务独享、网络稳定、高并发、低延迟的代理产品,确保目标服务器没法进行反爬限制及预警, 通过采用以上各项优化策略,能够让爬虫程序长期稳定的运行。
golang快速做好爬虫 Golang 语法简洁,并发和异步编程可以快速上手,从搭建框架到并发和异步编程都很高效的语言。从语言设计方面Golang 简单易懂。而 Golang 的 Goroutine 和 Channel 则是并发和异步处理的优秀封装。回调设计使用起来也很方便。 有的一定基础的研发在几天内就可以学习 掌握Golang ,并开发出一个效率不低的软件。另外在部署方面也有很大的优势,可以编译成无依赖的可执行文件,并且标准库的功能很全,因此用可以快速实现爬虫程序,并且方便的部署在云服务平台,实现数据的长期稳定采集。 当然要让爬虫程序长期采集目标网站不被放爬,还需要配合使用爬虫代理,如下就是简单案例: package main import ( "net/url" "net/http" "bytes" "fmt" "io/ioutil" ) // 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) const ProxyServer = "t.16yun.cn:31111" type ProxyAuth struct { Username string Password string } func (p ProxyAuth) ProxyClient() http.Client { var proxyURL *url.URL if p.Username != ""&& p.Password!="" { proxyURL, _ = url.Parse("http://" + p.Username + ":" + p.Password + "@" + ProxyServer) }else{ proxyURL, _ = url.Parse("http://" + ProxyServer) } return http.Client{Transport: &http.Transport{Proxy:http.ProxyURL(proxyURL)}} } func main() { targetURI := "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3" // 初始化 proxy http client client := ProxyAuth{"username", "password"}.ProxyClient() request, _ := http.NewRequest("GET", targetURI, bytes.NewBuffer([] byte(``))) // 设置Proxy-Tunnel // rand.Seed(time.Now().UnixNano()) // tunnel := rand.Intn(10000) // request.Header.Set("Proxy-Tunnel", strconv.Itoa(tunnel) ) response, err := client.Do(request) if err != nil { panic("failed to connect: " + err.Error()) } else { bodyByte, err := ioutil.ReadAll(response.Body) if err != nil { fmt.Println("读取 Body 时出错", err) return } response.Body.Close() body := string(bodyByte) fmt.Println("Response Status:", response.Status) fmt.Println("Response Header:", response.Header) fmt.Println("Response Body:\n", body) } }
JAVA如何使用Firefox采集数据 selenium是浏览器测试工具,可以模拟用户在浏览器中的各种操作。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。可以进行用户流程的录制(selenium IDE)、编写。在搭建环境的时候注意selenium和firefox的版本保持一致,同时设置开发者模式,防止被网站识别。为了长期采集数据,还需要加上代理IP,保证采集效果 import org.json.JSONException; import org.json.JSONObject; import org.openqa.selenium.Platform; import org.openqa.selenium.Proxy; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; import org.openqa.selenium.htmlunit.HtmlUnitDriver; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider; import com.gargoylesoftware.htmlunit.WebClient; public class FirefoxDriverProxyDemo { // 代理隧道验证信息 final static String proxyUser = "username"; final static String proxyPass = "password"; // 代理服务器 final static String proxyHost = "t.16yun.cn"; final static int proxyPort = 31111; final static String firefoxBin = "C:/Program Files/Mozilla Firefox/firefox.exe"; public static void main(String[] args) throws JSONException { System.setProperty("webdriver.firefox.bin", firefoxBin); FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.proxy.type", 1); profile.setPreference("network.proxy.http", proxyHost); profile.setPreference("network.proxy.http_port", proxyPort); profile.setPreference("network.proxy.ssl", proxyHost); profile.setPreference("network.proxy.ssl_port", proxyPort); profile.setPreference("username", proxyUser); profile.setPreference("password", proxyPass); profile.setPreference("network.proxy.share_proxy_settings", true); profile.setPreference("network.proxy.no_proxies_on", "localhost"); FirefoxDriver driver = new FirefoxDriver(profile); } }
nodejs爬虫快速入手 最近公司需要快速启动一个网站采集项目,本来准备用python动手,想想还需要环境和配置框架,干脆直接JavaScript吧。Nodejs 支持异步并发架构,能快速采集数据,如果用python做异步实现需要的工作量就大了,并且调试也很耽误时间。较短工作时间投入下,Nodejs 爬虫不仅上手简单,数据采集效率也数倍于python的爬虫。为了避免部分网站的反爬策略,使用爬虫代理IP能够持续稳定的进行数据采集,以下就是我的代码: const request = require("request"); // 要访问的目标页面 const targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d"; // 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) const proxyHost = "t.16yun.cn"; const proxyPort = "31111"; // 代理验证信息 const proxyUser = "username"; const proxyPass = "password"; const proxyUrl = "http://" + proxyUser + ":" + proxyPass + "@" + proxyHost + ":" + proxyPort; const proxiedRequest = request.defaults({'proxy': proxyUrl}); const options = { url : targetUrl, headers : { } }; proxiedRequest .get(options, function (err, res, body) { console.log("got response: " + res.statusCode); }) .on("error", function (err) { console.log(err); }) ;
数据采集-Scrapy框架使用代理IP要点 scrapy框架通过模块化的设计实现了数据采集的通用功能接口,并提供自定义拓展,它将程序员从繁冗的流程式重复劳动中解放出来,给编程人员提供了灵活简便的基础构建,对于普通的网页数据采集,编程人员只需要将主要精力投入在网站数据分析和网站反爬策略分析上,结合代理IP的使用,可以实现项目的高效快速启动。 主要特性包括: 1)参数化设置请求并发数,自动异步执行 2)支持xpath,简洁高效 3)支持自定义中间件middleware 4)支持采集源列表 5)支持独立调试,方便 shell 方式 6)支持数据管道接口定义,用户可以选择文本、数据库等多种方式 在Scrapy框架中使用代理的方式有如下几种: 1.scrapy中间件 在项目中新建middlewares.py文件(./项目名/middlewares.py),内容如下: #! -*- encoding:utf-8 -*- import base64 import sys import random PY3 = sys.version_info[0] >= 3 def base64ify(bytes_or_str): if PY3 and isinstance(bytes_or_str, str): input_bytes = bytes_or_str.encode('utf8') else: input_bytes = bytes_or_str output_bytes = base64.urlsafe_b64encode(input_bytes) if PY3: return output_bytes.decode('ascii') else: return output_bytes class ProxyMiddleware(object): def process_request(self, request, spider): # 代理服务器(产品官网16yun) proxyHost = "t****" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort) # 添加验证头 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass # 设置IP切换头(根据需求) tunnel = random.randint(1,10000) request.headers['Proxy-Tunnel'] = str(tunnel) 修改项目配置文件 (./项目名/settings.py) DOWNLOADER_MIDDLEWARES = { '项目名.middlewares.ProxyMiddleware': 100, } 2.scrapy环境变量 通过设置环境变量,来使用爬虫代理(Windows)
puppeteer框架简单采集微博 puppeteer框架其实是一个无界面chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。掌握关于puppeteer的知识对我们来说是很重要的。我们都知道无头浏览器是指没有窗口的浏览器。那我们使用puppeteer让浏览器帮我们自动完成很多事情,比如创建页面的截图或pdf,自动提交表单,UI测试,键盘测试,创建自动化测试环境等。对puppeteer有了基本的认识后,接下来我们实践爬虫实例加深对puppeteer的印象! const puppeteer = require('puppeteer'); // 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) const proxyServer = 'http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ft.16yun.cn%3A31111&urlrefer=a5817997a48561098427a0c149b4f1c8'; const username = '16BXQXGC'; const password = '234589'; (async() => { const browser = await puppeteer.launch({ args: [ '--proxy-server='+proxyServer+'','--no-sandbox', '--disable-setuid-sandbox' ]}); const page = await browser.newPage(); await page.authenticate({ username, password }); await page.goto('http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.weibo.com&urlrefer=c0ebf5c819da37bf2c03ad5fb5d8466e'); const cookies = await page.cookies(); await console.log(cookies); await page.setViewport({width: 320, height: 480}); await page.screenshot({path: '/screenshots/full.png', fullPage: true}); await browser.close(); })(); 所获取的简单的结果其实Puppeteer框架可以运用的场景有很多,希望大家可以多多尝试其他的场景。
爬虫中带验证码登陆的cookie 什么是cookie? Cookie是指网站为了辨别用户身份,进行 Session跟踪而存储在用户终端的数据。很多网站是要访问是需要先进行登陆的,所以在我们访问之前先进行cookie的登陆。 使用cookie登陆 有些网站是需要验证码才能登陆的,所以使用cookie登陆后,网站服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。 以下就以代码的方式访问获取cookie #! -*- encoding:utf-8 -*- import requests import random import requests.adapters # 要访问的目标页面 targetUrlList = [ "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.weibo.com&urlrefer=c0ebf5c819da37bf2c03ad5fb5d8466e", "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fheaders&urlrefer=8051c53e140123474ccefe2df0b8fdce", "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fuser-agent&urlrefer=0e98a10855163bc482e7a65c3c412e09", ] # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "16RIULPS" proxyPass = "524586" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(user)s:%(pass)s@%(host)s:%(port)s" % { "host": proxyHost, "port": proxyPort, "user": proxyUser, "pass": proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "http": proxyMeta, "https": proxyMeta, } # 访问三次网站,使用相同的Session(keep-alive),均能够保持相同的外网IP s = requests.session() # 设置cookie cookie_dict = {"JSESSION":"123456789"} cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) s.cookies = cookies for i in range(3): for url in targetUrlList: r = s.get(url, proxies=proxies) print r.text 若存在验证码,此时采用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!
爬虫两种不同的代理使用模式 在我们使用爬虫的过程中,很容易遇到反爬机制是禁用ip的,可以使用代理ip解决ip被封的问题。但是网上ip代理有很多家,到底选哪家好呢? 本文选择亿牛云代理(官网地址http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b)进行演示,使用php语言,如果需要大规模抓取可以去试试python。 在官网我们可以看到有提供两种方式进行代理,一种是api模式,一种是隧道模式。Api模式就是我们爬虫最常用到的,就是提供url连接给你,你的程序自动的获取代理信息。这个模式适合自己需要管理ip池控制ip的使用,ip的有效时间是2到10分钟;隧道模式就提供给你一个固定的服务器ip地址信息,包括ip:端口:用户名:密码只需要将代理信息配置到程序里面就可以使用,他们后台会自动切换ip,这个模式很方便,简单。 第一种方式 首先代理提供商会提供给你一个api接口,你可以通过这个接口去获取ip和端口号。但是这些ip的时效是2到10分钟,所以我建立了一个ip池,每两分钟去更新一次ip池,以确保这些ip每次用到的时候都是有效的。 第二种方式 可以直接查看亿牛云代理接入文档php代码,这种是动态转发模式的 <?php // 要访问的目标页面 $url = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d"; $urls = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3"; // 代理服务器 define("PROXY_SERVER", "tcp://t.16yun.cn:31111"); // 隧道身份信息 define("PROXY_USER", "16YUN123"); define("PROXY_PASS", "123456"); $proxyAuth = base64_encode(PROXY_USER . ":" . PROXY_PASS); // 设置 Proxy tunnel $tunnel = rand(1,10000); $headers = implode("\r\n", [ "Proxy-Authorization: Basic {$proxyAuth}", "Proxy-Tunnel: ${tunnel}", ]); $sniServer = parse_url($urls, PHP_URL_HOST); $options = [ "http" => [ "proxy" => PROXY_SERVER, "header" => $headers, "method" => "GET", 'request_fulluri' => true, ], 'ssl' => array( 'SNI_enabled' => true, // Disable SNI for https over http proxies 'SNI_server_name' => $sniServer ) ]; print($url); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); var_dump($result); // 访问 HTTPS 页面 print($urls); $context = stream_context_create($options); $result = file_get_contents($urls, false, $context); var_dump($result);?> 经过一周的测试,代理的有效率在90%以上,总体来说效果是很好的,尤其是稳定性。
用Charles抓取App数据总结分析 现在分析一下这个请求和响应的详细信息。首先可以回到Overview选项卡,上方显示了请求的接口URL,接着是响应状态Status Code、请求方式Method等,如下图所示。这个结果和原本在Web端用浏览器开发者工具内捕获到的结果形式是类似的。 接下来点击Contents选项卡,查看该请求和响应的详情信息。 上半部分显示的是Request的信息,下半部分显示的是Response的信息。比如针对Reqeust,我们切换到Headers选项卡即可看到该Request的Headers信息,针对Response,我们切换到JSON TEXT选项卡即可看到该Response的Body信息,并且该内容已经被格式化,如下图所示。由于这个请求是POST请求,我们还需要关心POST的表单信息,切换到Form选项卡即可查看,如下图所示。这样我们就成功抓取App中的评论接口的请求和响应,并且可以查看Response返回的JSON数据。 至于其他App,我们同样可以使用这样的方式来分析。如果我们可以直接分析得到请求的URL和参数的规律,直接用程序模拟即可批量抓取。 重发 Charles还有一个强大功能,它可以将捕获到的请求加以修改并发送修改后的请求。点击上方的修改按钮,左侧列表就多了一个以编辑图标为开头的链接,这就代表此链接对应的请求正在被我们修改,如下图所示。我们可以将Form中的某个字段移除,比如这里将partner字段移除,然后点击Remove。这时我们已经对原来请求携带的Form Data做了修改,然后点击下方的Execute按钮即可执行修改后的请求,如下图所示。可以发现左侧列表再次出现了接口的请求结果,内容仍然不变,如下图所示。删除Form表单中的partner字段并没有带来什么影响,所以这个字段是无关紧要的。 有了这个功能,我们就可以方便地使用Charles来做调试,可以通过修改参数、接口等来测试不同请求的响应状态,就可以知道哪些参数是必要的哪些是不必要的,以及参数分别有什么规律,最后得到一个最简单的接口和参数形式以供程序模拟调用使用。 结语 以上内容便是通过Charles抓包分析App请求的过程。通过Charles,我们成功抓取App中流经的网络数据包,捕获原始的数据,还可以修改原始请求和重新发起修改后的请求进行接口测试。 知道了请求和响应的具体信息,如果我们可以分析得到请求的URL和参数的规律,直接用程序模拟即可批量抓取,这当然最好不过了。 但是随着技术的发展,App接口往往会带有密钥,我们并不能直接找到这些规律,那么怎么办呢?接下来,我们将了解利用Charles和mi***ump直接对接Python脚本实时处理抓取到的Response的过程。
新手使用python采集数据 背景 , 原本不是爬虫的,因公司业务需求需要一些前程无忧的数据,被迫上岗,简单的学了些python。因为网站的特殊性,访问次数多了就要封ip,意味着还要找ip。所以在网上随便找了家代理叫亿牛云,然后跟客服沟通了下我这个小白的需求,客服跟我推介了他们家的爬虫动态转发代理,说适合我这样的小白使用,使用方式比较简单,我就抱着试试的想法接受了。客服给我发了一段关于python怎么使用他们家代理的代码示例,http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.16yun.cn%2Fhelp%2Fss_demo%2F%231python&urlrefer=79b2c4123bb96a302804cac077431580。打开看了之后我以为示例就是可以直接使用的,而且客服也说过代码示例可以直接复制使用,我就直接复制然后把目标网站改成了我自己的,代码如下 #! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.mkt.51job.com&urlrefer=0cce517ca39a1aee1c3ac57574bd9180" # 要访问的目标HTTPS页面 # targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.mkt.51job.com&urlrefer=ea5c9da11d9ab166074c2fe09ff9dde8" # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(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 然后就去运行,结果是这样然后就去找客服,结果人家说那只是代码示例,里面的代理参数是需要他们提供重新配置才可以使用,顿时就觉得自己真的很小白,然后请客服开通了代理测试了下,结果运行起了,对我这样的小白来还好使用的方式简单,不然又要各种查资料了。我想很多人都是这样吧,刚开始的时候各种小白问题都有可能存在,看来不管是哪个领域,还是要深入的学习才好!
爬虫入门基础-Firefox数据抓包 啥是 POST 请求呢?我们在做一些信息提交的时候 比如注册,登录这时候我们做的就是 POST 请求,POST 的参数不会直接放在 URL 上,会以 Form 表单的形式将数据提交给服务器。 我们来登录一下ip.16yun.cn:817当我们点击登录的时候,就开始将我们的账号密码请求给务器,可以看到我们请求了 登录 这个接口,请求方法就是 POST。而我们的请求参数是以 Form 表单的方式提交的拉到下面就可以看到 username 就是 test password 就是 test 这些都是 POST 参数 可以发现,GET请求把请求参数都暴露在URL上,而POST请求的参数放在request body 里面这个就是请求头,Request Header,我们在做 HTTP 请求的时候,除了提交一些参数之外,我们还有定义一些 HTTP 请求的头部信息,比如 Accept、Host、cookie、User-Agent等等,这些参数也是我们在做爬虫要用到 ,通过这些信息,欺骗服务器,告诉它我们是正规请求。 比如,我们可以在代码里面设置 cookie 告诉服务器我们就是在这个浏览器请求的会话,User-Agent 告诉服务器我们是浏览器请求的,说完我们这边的请求了. 接着我们再说说服务器的响应 你一定遇到过 404 页面吧,或者服务器错误返回个 502 ,这些 404 ,200,301,502 都是服务器的响应码,一般服务器给我们返回 200,那就说明,我们成功请求了。 再来说说响应头,当我们请求成功之后,服务器会给我们返回响应码之外,还有响应头,这个头主要是告诉我们数据以什么样的形式展现,告诉我们cookie的设置,还有一个,就是响应体了。 说白了,就是服务器返回给我们的数据,我们点击 Response 就可以看到相关的数据了看,这些就是服务器返回给我们的 HTML 源代码,对于不同的请求,我们获取到的数据是不一样的,除了 HTML的,也有 JSON 的,图片二进制数据等等,可以针对不同的情况,用不同的手段来解析这些数据 说到这里,想必你已经会在 Firefox 抓包了,所谓抓包,就是我们摸清了浏览器里面的套路,知道它是怎么搞,那么通过我们的请求,GET 请求也好,POST 请求也罢,只要知道请求方式,只要知道请求参数,只要知道请求头定义,只要知道怎么拿到返回的数据。
使用python 加代理刷流量 1,关于刷流量 做开发的有的时候会被拜托一些特殊的业务。 比如说刷票,但是你又不好拒绝,比如你钟情的美女突然有一天拜托你刷票。 这个时候就开发一个刷票工具了。 python 还是非常强大的。非常方便。 2,使用python 不是使用原生的url2访问,而是使用requests库。 比较方便一点,方便编程。参数比较详细。 参考文档: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdocs.python-requests.org%2Fzh_CN%2Flatest%2F&urlrefer=76f3108995747de98cd5775c701610ca 使用一个高级特性代理: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b 2,python代码 #!/usr/bin/python # -*- coding: utf-8 -*- # 需要安装 requests 库 : # sudo easy_install pip # sudo pip install requests import requests for i in range(1, 10): proxies = { "http": "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F61.164.252.106%3A139&urlrefer=75656c8898557568aac8a2c92c0e776f" } url = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fm.csdn.net%2Findex.html&urlrefer=12dcedaf7ef70f376b423e952469b883" print(url) req = requests.get(url) # 设置编码 req.encoding = 'utf-8' print(req.text) 使用代理服务器访问csdn网站。 这样的ip就变成代理服务器的ip了。 有个问题。代理服务器的ip和端口从哪里查询呢?有个这样的网站 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn+&urlrefer=29faa40fa28d34f9d406c06422d6595e上面的代理很好用,有些网站对ip的要求还是很高,找个高质量的代理是很有必要的。 把上面的代理服务器的ip和端口保存下来然后在配合脚本就可以了。 如果增加参数可以随机几个agent和参数 headers = { "User-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2454.85 Safari/537.36" } req = requests.get(url, headers=headers, params={}) requests类库还是非常强大的。然后就可以根据每一个网站进行分析了
新手使用python采集数据的尴尬事之代理ip 背景 , 原本不是爬虫的,因公司业务需求需要一些前程无忧的数据,被迫上岗,简单的学了些python。因为网站的特殊性,访问次数多了就要封ip,意味着还要找ip。所以在网上随便找了家代理叫亿牛云,然后跟客服沟通了下我这个小白的需求,客服跟我推介了他们家的爬虫动态转发代理,说适合我这样的小白使用,使用方式比较简单,我就抱着试试的想法接受了。客服给我发了一段关于python怎么使用他们家代理的代码示例,http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.16yun.cn%2Fhelp%2Fss_demo%2F%231python&urlrefer=79b2c4123bb96a302804cac077431580。打开看了之后我以为示例就是可以直接使用的,而且客服也说过代码示例可以直接复制使用,我就直接复制然后把目标网站改成了我自己的,代码如下 #! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.mkt.51job.com&urlrefer=0cce517ca39a1aee1c3ac57574bd9180" # 要访问的目标HTTPS页面 # targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.mkt.51job.com&urlrefer=ea5c9da11d9ab166074c2fe09ff9dde8" # 代理服务器(产品官网 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F%25&urlrefer=a59e645564b946b983c343adb2831969(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 然后就去运行,结果是这样然后就去找客服,结果人家说那只是代码示例,里面的代理参数是需要他们提供重新配置才可以使用,顿时就觉得自己真的很小白,然后请客服开通了代理测试了下,结果运行起了,对我这样的小白来还好使用的方式简单,不然又要各种查资料了。我想很多人都是这样吧,刚开始的时候各种小白问题都有可能存在,看来不管是哪个领域,还是要深入的学习才好!
刚开始学python,在研读前人的程序,截图中这表示的方法是什么呢
大家做爬虫需要用到代理ip吗 大家都是怎么选择ip的呀
有做java爬虫的吗? 学习下呀
高匿代理ip与普通匿名代理ip有什么优势。 同样作为匿名代理ip,高匿代理ip与普通匿名代理ip在使用过程中是有区别的,只是很多用户在使用过程中没有细致观察或者对二者的认识了解不多,因此才造成高匿代理ip与普通匿名代理ip没有区别的认识。 普通匿名代理ip在用户使用的过程中虽然隐藏了用户的真实ip,但是同样的,它也改变了用户发出的请求。因此对于使用普通匿名代理ip来说,网站可以轻易的发现其运用了代理ip,用户的真实ip也可以被网站监测得到。 而由亿牛云提供的高匿代理ip,是基于Linux系统研发的平台,自营线路,电信机房宽带,私密家庭动态IP。在隐藏用户的真实代理ip的同时,它真实的发出用户的请求,使得网站无法监测到用户是否使用代理ip。而这个时候,即使网站对其进行检测,也无法得到用户的真实ip。由此可见从匿名强度来说,亿牛云提供的高匿代理ip与普通匿名代理ip的差别是很大的。 官网:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b 客服qq:2221256510
代理IP让网络爬虫更快速抓取数据 如今,很多人每天的工作都要与网络打交道。网络爬虫就是很多工作者每天做的任务,网络爬虫是用程序抓取目标网站的数据,得到数据后可以进行分析,来完善自己的网站。 网络爬虫程序很简单,但是并不好做。现在很多网站都有对抗方式,那就是反爬虫机制,爬虫程序如果运行的频率过快,或者访问的次数过多,都容易被发现,从而被封IP,导致无法再继续工作,代理IP的出现就解决了这个问题。使用代理IP后,可以定时进行更换IP,不同地区的IP爬取目标网站就不会被发现了,可以达到很好的效果。一些代理IP软件都具有自动换IP的功能,可以自动更换IP,这样节省了很多时间,大大提高了爬虫的工作效率。 所以说代理IP能让网络爬虫更快的抓取数据,亿牛云代理IP稳定,可用率高达99%,覆盖全国多城市,电信专线,速度快,延迟低。是数据采集的好帮手。
电商可以使用代理ip刷单吗? 在电商变成传统行业以后,开始变得稳定,但是,行业强大之后,竞争也会越来越大,很多电商跟线下的企业一样,要有好的供应链,要有好的团队,要有好的稳定的管理体系和品牌口碑。如果这些都没有,仅仅只靠十年电商经验,那么很快就会被淘汰,所以,如果想要在这庞大的电商队伍中占有一席之地,也要选择对的方法才行,于是,很多商家选择了刷单。 现在,刷单的方法多种多样,但是对于一般商家来多,大多数选择了雇人来为自己刷单,这个方法是怎么刷呢,就是在论坛,贴吧等有大量网络人群聚集的地方发布兼职招聘,找到来自各个地方的人来为自己刷单,但是,从找人到为自己刷单的过程中浪费很多时间。那么有什么办法可以代替这种方法呢?方法当然有。 现在一小部分的商家已经开始使用高匿http代理ip为自己刷单了,比如亿牛云代理,亿牛云代理是基于Linux系统研发的平台,自营线路,电信机房宽带,私密家庭IP。代理ip不仅可以实现高匿名,因为是自营线路,代理的稳定性,延迟,使用速度都是最好的。同时代理的定价也是很符合大众客户需求的.合理的收费,高效的代理。现在亿牛云受到了很多电商的欢迎。http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.16yun.cn&urlrefer=d173c486dc12f416200e47c3310a490b
稳定的代理ip对网络爬虫的重要性 作为网络爬虫数据的采集是只要的来源,随着互联网大数据的迅速发展,网络爬虫也是需要一直提升技术来适应全面更新的要求,而稳定的代理ip肯定是爬虫的前提,稳定极速的代理ip能够支撑爬虫的工作效率和工作进行的稳定,如何更好的选择一家服务商也是很重要的吗,所以一下就是分享的选择一家稳定服务商主要看那些方面: ip资源丰富: 代理分布地区广,ip供应量才会大。丰富的ip资源才会给大量的数据采集提供稳定的保证,提高工作的效率。 运营商资源(如;电信,联通) 看服务商资源是否是与电信,联通运营商合作的资源,具有正规的idc机房管理和完善专业的机房维护,专线代理,才会提供更稳定的使用效果。 高匿安全代理: 代理ip具有高度匿名,保护隐私,保障数据安全,使用过程畅快无 ip有效率: 对于数据采集来的ip来说,有效率是重点,可用的ip越多,数据采集的量越大,不然就算有千万的ip,可以用的ip少,也是浪费时间,浪费金钱。 基于Linux系统研发的平台,自营线路,电信机房宽带,私密家庭IP。ip分布全国,ip池大,电信专线,代理稳定,速度快。提供api获取代理和动态转发两种模式,业务独享管理,保证长期数据采集的效果。强大的技术团队,随时可以帮助解决问题。亿牛云一家值得信赖的代理服务商。
http代理ip选择的重点 作为一个首先发展起来的代理ip,http代理ip在网络上的应用是最多的,针对其提供的代理ip服务也是很多的,但是这也为用户选择http代理ip服务增加了难度,如果不是对http代理ip服务非常熟悉和了解的人,是很难轻易找寻到一个可靠的http代理ip服务的。 对于用户来说,选择http代理ip之前,去了解想要选择的代理商是很重要的,而这是完全可以在网络上找寻到答案的。许多http代理ip使用用户在使用以后,都会对其作出评价,这些评价都是客观真实的,可以帮助初次使用的用户来作出选择。 作为一家优质代理ip的服务厂家,我们为用户提供的http代理ip都是稳定,高质量的。在使用代理的客户对其评价也非常高,在搜寻代理商排名的时候,亿牛云也是遥遥领先的,因此选择亿牛云代理,就是选择了靠谱,选择了稳定,选择了高效的完成任务。
亿牛云代理代理能访问,出现大量403、504或503? 原因:爬虫程序的采集行为被网站标识并拒绝服务,求对方控制每个代理IP的请求数,并且增加IP提取量。
爬虫程序使用代理返回200但是么有数据? 代理是使用的爬虫代理,程序返回的是200,但是没有任何数据返回是什么原因呢?
亿牛云api代理提供文档 API格式提取 API就是url链接,用户的程序需要支持API的读取,定期从url中获取代理IP的相关信息,其文本格式如下: (1)默认文本格式
C Sharp程序中配置代理信息示例 // 要访问的目标页面 string targetUrl = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttpbin.org%2Fip&urlrefer=5921d41471bae475960a10179cd9092d"; // 代理服务器 string proxyHost = "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ft.16yun.cn&urlrefer=d834d1ff518f394beeb55c530430e6e2"; string proxyPort = "6447"; // 代理隧道验证信息 string proxyUser = "16IXNGXO"; string proxyPass = "366338"; // 设置代理服务器 WebProxy proxy = new WebProxy(string.Format("{0}:{1}", proxyHost, proxyPort), true); ServicePointManager.Expect100Continue = false; var request = WebRequest.Create(targetUrl) as HttpWebRequest; request.AllowAutoRedirect = true; request.KeepAlive = true; request.Method = "GET"; request.Proxy = proxy; //request.Proxy.Credentials = CredentialCache.DefaultCredentials; request.Proxy.Credentials = new System.Net.NetworkCredential(proxyUser, proxyPass); // 设置Proxy Tunnel // Random ran=new Random(); // int tunnel =ran.Next(1,10000); // request.Headers.Add("Proxy-Tunnel", String.valueOf(tunnel)); //request.Timeout = 20000; //request.ServicePoint.ConnectionLimit = 512; //request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36"; //request.Headers.Add("Cache-Control", "max-age=0"); //request.Headers.Add("DNT", "1"); //String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(proxyUser + ":" + proxyPass)); //request.Headers.Add("Proxy-Authorization", "Basic " + encoded); using (var response = request.GetResponse() as HttpWebResponse) using (var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { string htmlStr = sr.ReadToEnd(); }
亿牛云代理有没有python3的代码示例 求亿牛云动态转发代理python3的代码示例
亿牛云代理提取失败或提取之后大量代理访问失败的原因 由于亿牛云提供的代理是私密家庭代理,提取和使用都需要绑定IP白名单,因此必须确保提取和使用代理的服务器,其IP白名单都添加到后台;同时由于移动、手机热点、铁通、鹏博士、长宽是互联网多出口动态分配特性,导致出口IP随机变化,也会出现代理提取失败或访问失败,需要具备电信、联通、各类云服务器或固定IP等网络。
亿牛云提供的爬虫代理里面的自主切换IP是什么意思? 该模式适合一些需要登陆、Cookie缓存处理等爬虫需要精确控制IP切换时机的业务。 爬虫程序可以通过设置HTTP头Proxy-Tunnel: 随机数, 当随机数相同时,访问目标网站的代理IP相同。 例如 需要登录,获取数据两个请求在一个IP下,只需对这组请求设置相同Proxy-Tunnel,例如:Proxy-Tunnel: 12345, 该组请求在代理有效期内使用相同的代理IP。 注意 同一时间不同请求组可以设置不同Proxy-Tunnel: 随机数,并发完成数据爬取。 使用相同IP访问HTTPS目标网站 1 使用Connection: keep-alive和Proxy-Connection: keep-alive方式访问目标网站,代理会确保在一个会话中的所有请求都通过一个IP到达目标网站 2 设置相同Proxy-Tunnel,有些库封装比较高层次,请务必确认向代理发送了该HTTP头。
哪里有好用的动态转发代理推介? 目前使用的是亿牛云的动态转发爬虫代理,效果很好,但是需要更大量的,有提供吗?
目标网站反爬虫很严要怎么解决? 一 前言 在网站的采集过程中,每天都要面对网站的各种反爬虫技术,然而我们要想拿到数据,就需要针对性的制定很多方法来突破他们的反爬。例如,在采集数据过程中目标网站能识别出你的UserAgent,那你在采集的时候就需要添加很多的UserAgent来进行伪造,躲避它们的识别。有些网站能通过cookie来进行识别,所以cookie也是需要加上。它限制你的ip请求次数,那么你就需要限制你的ip速度或者换ip。更严的是会用验证码来识别你是人还是机器,那么你就需要模拟人的行为来进行突破。 就以我现在采集的项目为例,有个项目是需要采集大众点评的数据,相信大家都知道这个网站很难采集的,ip的请求次数限制的很严,但是我又需要很多的数据,如果是通过降低我爬虫的速度那肯定是不行的,这样的话数据不知道要猴年马月才能采集完。所以我只能通过不停的切换动态ip来应对。那我需要在很短的时间内采集大量的数据,不能把时间用在管理ip池,验证他们的可用性上,所以我需要可以在java中可以实现自动切ip,这样我才可以把时间用在数据的采集上。 在网上找了很多的代理,大多都是提供的api模式的,需要我自己管理ip池,我时间紧数据量又大,这个显然不适合。找到了几家提供动态转发模式的,也测试了几家,可能是因为这个网站的特殊性也可能是因为他们的代理不稳定效果都不是很理想。最近找了一家比较新的代理商叫亿牛云,也有提供动态转发模式,据他们客服说他们还是业务独享模式的,这个不知道真假,但是想着既然是业务独享那我采集的这个网站就是我一个人在使用他们的ip池。那感觉应该可以,所以就以他们家的测试为例。但是使用的时候需要先修改下程序,一开始觉得比较麻烦,不怎么愿意测试,但是想着找了那么多家都达不到要求,那就花点时间修改下吧,还好修改的不是很多,而且他们有提供接入文档。 二 亿牛云接入文档范例 亿牛云官网有提供java的示例代码 JAVA HttpClient3.1 import org.apache.commons.httpclient.Credentials;import org.apache.commons.httpclient.HostConfiguration;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.UsernamePasswordCredentials;import org.apache.commons.httpclient.auth.AuthScope;import org.apache.commons.httpclient.methods.GetMethod; import java.io.IOException; public class Main { private static final String PROXY_HOST = "t.16yun.cn"; private static final int PROXY_PORT = 31111; public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fhttpbin.org%2Fip&urlrefer=744895f0628bbe89a3414a726dbe78d3"); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST, PROXY_PORT); client.getParams().setAuthenticationPreemptive(true); String username = "16ABCCKJ"; String password = "712323"; Credentials credentials = new UsernamePasswordCredentials(username, password); AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT); client.getState().setProxyCredentials(authScope, credentials); try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); System.out.println("Response = " + response); } } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } }} 这个demo是直接复制使用的,里面的代理的配置部分是购买的代理信息里面提供的,对应的配置进去就可以运行。 注意事项 亿牛云的动态转发是按照每秒的请求量进行的,这个需要根据自己的数据量对应的进行购买使用。还有就是他们有提供标准和加强版,好像是ip池大小不一样,这个需要具体的向客服了解。根据自己的实际需求进行使用。 最后 程序这个东西都是一通百通的,亿牛云提供的代码示例是可以直接使用在我们的程序里面运行,那其他提供相同模式的代理平台的提供的示例应该也可以使用,但是建议大家还是自己编写程序进行测试,这样亲自实践的东西才会真正的掌握在自己的手上。
亿牛云动态转发与传统API提取代理的区别 传统API提取式代理,通过URL定时获取代理IP信息,需验证IP的可用性、更换代理设置,同时需要设计多线程异步IO,实现代理IP并发处理,不仅繁琐,而且影响效率。 “亿牛云爬虫代理IP”通过固定云代理服务地址,建立专线网络链接,代理平台自动实现毫秒级代理IP切换,极大的提供网络稳定性和速度,避免爬虫客户在代理IP策略优化上投入精力。
1
下一页