【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/

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