【VSRC唯科普】远程采集(14/14篇)

百家 作者:唯品会安全 2020-04-14 17:33:15

鸣 谢



VSRC感谢业界小伙伴——Mils?投稿精品科普类文章。VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们已为您准备好了丰富的奖品!

(活动最终解释权归VSRC所有)




到现在为止,我们已经在自己本地的电脑上通过命令行,运行了所有唯科普中的Python程序,本次的唯科普我们将介绍让程序在不同的机器上运行,或者在本地电脑上用不同的IP运行的方法。





01

使用Python设置IP代理

一般的,网站会对其内容进行保护,而采取某些策略来阻止自动化程序或脚本的数据采集,这些策略的重点通常会放在识别人类与机器人的行为差异上,大多数则会直接采用封杀IP地址的来阻止自动化的数据读取,但是大范围的IP地址封禁也容易存在引起对正常业务的误拦截的情况,但是即便如此,封杀IP地址依然是一种十分常见的防护手段,可以有效阻止可疑网络爬虫对服务器的入侵。?使用不同的IP地址或使用远程的IP地址可以有效避免IP地址被封禁的问题。以下示例演示的是一个简易的设置代理IP的方式:

from?bs4?import?BeautifulSoup
import?requests
import?random

def?get_ip_list(url,?headers):
????web_data?=?requests.get(url,?headers=headers)
????soup?=?BeautifulSoup(web_data.text,?'lxml')
????ips?=?soup.find_all('tr')
????ip_list?=?[]
????for?i?in?range(1,?len(ips)):
????????ip_info?=?ips[i]
????????tds?=?ip_info.find_all('td')
????????ip_list.append(tds[1].text?+?':'?+?tds[2].text)
????return?ip_list

def?get_random_ip(ip_list):
????proxy_list?=?[]
????for?ip?in?ip_list:
????????proxy_list.append('http://'?+?ip)
????proxy_ip?=?random.choice(proxy_list)
????proxies?=?{'http':?proxy_ip}
????return?proxies

if?__name__?==?'__main__':
????url?=?'http://www.xicidaili.com/nn/'
????headers?=?{
????????'User-Agent':?'Mozilla/5.0?(Windows?NT?6.1;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/53.0.2785.143?Safari/537.36'
????}
????ip_list?=?get_ip_list(url,?headers=headers)
????proxies?=?get_random_ip(ip_list)
????print(proxies)

(1)其中get_ip_list(url, headers)传入url和headers,最后返回一个IP列表,列表的元素类似{IP:PORT}格式,这个列表包括国内髙匿代理IP网站首页所有IP地址和端口,如图所示:

(2)函数get_random_ip(ip_list)传入第一个函数得到的列表,返回一个随机的proxies,这个proxies可以传入到requests的get方法中,这样就可以做到每次运行都使用不同的IP访问被爬取的网站,有效地避免了真实IP被封的风险。proxies的格式是一个字典:{'http': 'http://114.99.54.65:8118'}





02

使用PySocks模块设置代理通信

PySocks是一个非常简单的Python代理服务器通信模块,是一个基于Python的SOCKS代理客户端。Socks是一种代理服务,可以简单地将一端的系统连接到另外一端,支持多种协议,包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议,其标准端口为1080。PySocks模块的使用示例如下:

import?socks
import?socket
from?urllib.request?import?urlopen

url?=?'http://www.xicidaili.com/nn/'
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,?"localhost",?9999)
socket.socket?=?socks.socksocket
print(urlopen(url).read())

网络一直在不断变化,其背后的技术也在不断升级和改进。在使用自动化技术采集互联网数据的同时,很少遇到完全无法解决的问题,只需要记住一点:互联网其实就是一个用户界面不太友好的超级API。?

作为一名知识的搬运工,搬运途中多多少少遇到了不少BUG,唯科普的每一行代码,都有相应运行截图以及说明,希望VSRC的每一名读者,从中都能有所收获。?





03

参考资料

1、http://cn.python-requests.org/zh_CN/latest/

2、https://www.python.org/dev/peps/

3、《Web Scraping with Python》

4、https://blog.csdn.net/lammonpeter/article/details/52917264





唯科普 | 《数据采集》目录

A.K.A "小白终结者"系列

第1篇、初识网络通信

第2篇、来点更精彩的正则表达式吧

第3篇、多种数据采集方式

第4篇、让我们加入点API

第5篇、数据的存储

第6篇、文档读取

第7篇、数据清洗

第8篇、自然语言处理之概括数据(上篇)

第8篇、自然语言处理之马尔可夫模型(中篇)

第8篇、自然语言处理之六度分割终极篇(下篇)

第9篇、穿越网页表单与登录窗口的采集

第10篇、关于数据的采集姿势

第11篇、图像识别与文字处理

第12篇、避开采集的陷阱

第13篇、用自动化程序测试网站

第14篇、远程采集




精彩原创文章投稿有惊喜!

欢迎投稿!

VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将为您准备的丰富奖金税后1000元现金或等值礼品,上不封顶!如若是安全文章连载,奖金更加丰厚,税后10000元或等值礼品,上不封顶!还可领取精美礼品!可点击“阅读原文”了解规则。(最终奖励以文章质量为准。活动最终解释权归VSRC所有)



我们聆听您宝贵建议


不知道,大家都喜欢阅读哪些类型的信息安全文章?

不知道,大家都希望我们更新关于哪些主题的干货?

现在起,只要您有任何想法或建议,欢迎直接回复本公众号留言!

精彩留言互动的热心用户,将有机会获得VSRC赠送的精美奖品一份!

同时,我们也会根据大家反馈的建议,选取热门话题,进行原创发布!


点击阅读原文进入 ? 【VSRC征稿】宅家副业攻略请查收!



关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接