一、网页的检查
万变代理网下的国内高匿部分,是一个很简单的get请求,唯一变化的就是url:
网页界面如下,很规则,很友好。下面开始写代码。
007获取此案例源码!
# 定义一个主函数 def main(): # 输入固定的参数 url = 'https://www.xicidaili.com/nn/' start_page = int(input('\n请输入起始页码:')) end_page = int(input('\n请输入结束页码:')) items = [] # 构建一个循环,用于爬取任意某页至某页 for page in range(start_page,end_page+1): print('\n第{}页开始爬取'.format(page)) # 拼接网页 url_new = url + str(page) + '/' # 请求网页,获取响应——通过构建函数:req_res 实现 response = req_res(url_new) # 解析响应——通过构建函数: parse_res 实现 items = parse_res(response,items) # 休眠5秒 time.sleep(2) print('\n第{}页结束爬取'.format(page)) # 以CSV格式保存数据 df = pd.DataFrame(items) df.to_csv('IP_data.csv',index=False,sep=',',encoding='utf-8-sig') print('*'*30) print('全部爬取结束') if __name__ == '__main__': main()
2、拼接url
该步只需要一行代码,因此直接写在主函数中。
# 拼接url url_new = url + str(page) + '/'
3、请求网页,获取响应。
主函数要尽量保持简洁,而把复杂的代码通过定义函数来实现,这里的第二步(即请求网页)和第三步(即获取响应)代码较多,这里通过建立函数:req_res来实现,由于urllib库已经介绍过,这里使用requests库来进行实现。代码如下:
# 构建请求函数,返回得到的响应 def req_res(url): # 构建请求函数第一步——构建头部信息 USER_AGENT = [ "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", ] user_agent = random.choice(USER_AGENT) headers = { 'User-Agent':user_agent } # 构建请求函数第二步——构建代理池 # 本文就是为了爬取代理池,此处略 # 发起请求,获取响应 response = requests.get(url,headers = headers).text # 返回响应 return response
4、解析函数
获得响应之后,就要对响应进行解析了。这里也通过建立一个函数来实现。同样还是使用bs4.
代码如下:
# 构建解析函数,返回数据(以字典格式返回) def parse_res(response,items): soup = BS(response) # 先取出所需数据的所有存放地—— tr_list = soup.select('#ip_list > tr')[1:] # 通过遍历tr列表取出所需数据——这里演示都取出,实际只需要ip地址和端口 for tr in tr_list: # 获取ip地址 ip_add = tr.select('td')[1].text # 获取端口 port = tr.select('td')[2].text # 获取服务器地址 server_add = tr.select('td')[3].text.strip() # 获取是否匿名信息 anonymous_type = tr.select('td')[4].text # 获取http类型 http_type = tr.select('td')[5].text # 获取连接速度 SPEED = tr.select('td')[6] speed = SPEED.div.attrs['title'][:-1] # 获取连接时间 TIME_CO = tr.select('td')[7] time_co = TIME_CO.div.attrs['title'][:-1] # 获取存活时间 time_ar = tr.select('td')[8].text # 获取验证时间 time_pr = tr.select('td')[9].text # 将以上数据录入一个字典 item = { 'IP地址':ip_add, '端口':port, '服务器地址':server_add, '匿名信息':anonymous_type, '类型':http_type, '连接速度':speed, '连接时间':time_co, '存活时间':time_ar, '验证时间':time_pr } items.append(item) # 返回数据 return items
5、保存数据
此处代码也较少,直接写在主函数中。
# 以CSV格式保存数据 df = pd.DataFrame(items) df.to_csv('IP_data.csv',index=False,sep=',',encoding='utf-8-sig')
6、完整代码
这样一个爬取代理IP的完整流程代码就完成了。完整代码如下:
import requests import pandas as pd import random import time from bs4 import BeautifulSoup as BS # 构建请求函数,返回得到的响应 def req_res(url): # 构建请求函数第一步——构建头部信息 USER_AGENT = [ "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", ] user_agent = random.choice(USER_AGENT) headers = { 'User-Agent':user_agent } # 构建请求函数第二步——构建代理池 # 本文就是为了爬取代理池,此处略 # 发起请求,获取响应 response = requests.get(url,headers = headers).text # 返回响应 return response # 构建解析函数,返回数据(以字典格式返回) def parse_res(response,items): soup = BS(response) # 先取出所需数据的所有存放地—— tr_list = soup.select('#ip_list > tr')[1:] # 通过遍历tr列表取出所需数据——这里演示都取出,实际只需要ip地址和端口 for tr in tr_list: # 获取ip地址 ip_add = tr.select('td')[1].text # 获取端口 port = tr.select('td')[2].text # 获取服务器地址 server_add = tr.select('td')[3].text.strip() # 获取是否匿名信息 anonymous_type = tr.select('td')[4].text # 获取http类型 http_type = tr.select('td')[5].text # 获取连接速度 SPEED = tr.select('td')[6] speed = SPEED.div.attrs['title'][:-1] # 获取连接时间 TIME_CO = tr.select('td')[7] time_co = TIME_CO.div.attrs['title'][:-1] # 获取存活时间 time_ar = tr.select('td')[8].text # 获取验证时间 time_pr = tr.select('td')[9].text # 将以上数据录入一个字典 item = { 'IP地址':ip_add, '端口':port, '服务器地址':server_add, '匿名信息':anonymous_type, '类型':http_type, '连接速度':speed, '连接时间':time_co, '存活时间':time_ar, '验证时间':time_pr } items.append(item) # 返回数据 return items # 定义一个主函数 def main(): # 输入固定的参数 url = 'https://www.xicidaili.com/nn/' start_page = int(input('\n请输入起始页码:')) end_page = int(input('\n请输入结束页码:')) items = [] # 构建一个循环,用于爬取任意某页至某页 for page in range(start_page,end_page+1): print('\n第{}页开始爬取'.format(page)) # 拼接网页 url_new = url + str(page) + '/' # 请求网页,获取响应——通过构建函数:req_res 实现 response = req_res(url_new) # 解析响应——通过构建函数: parse_res 实现 items = parse_res(response,items) # 休眠5秒 time.sleep(2) print('\n第{}页结束爬取'.format(page)) # 以CSV格式保存数据 df = pd.DataFrame(items) df.to_csv('IP_data.csv',index=False,sep=',',encoding='utf-8-sig') print('*'*30) print('全部爬取结束') if __name__ == '__main__': main()
三、爬取结果
运行上述代码,西刺代理每页显示100条IP信息,这里以爬取前50页5000条IP信息为例。结果如下:
打开保存到本地的CSV文件,如下。可见5000条信息全部爬取成功。
四、IP验证
IP虽然爬取下来了,但是能不能用确是不一定的,实际上,代理IP一般都是收费的,所以免费的东西,自然没好货,不出意外的话,爬取下来的IP绝大多数是不能用的,所以需要验证下。
这里提供两种方法:
1、利用python。由于使用第二种方法,这里对第一种方法只提供想法。将爬取下来的ip使用requests库的代理方法,进行某个网页的访问,通过判断请求的响应码是否为200来判断ip是否可用(这里应该再加上个响应时间),若响应码为200则保留,否则剔除。但显然,这种方法太浪费时间。
2、利用一个叫花刺代理的软件,安装后,可直接批量检查爬取下来的IP是否可用,这里使用该软件对刚刚爬取下来的5000个IP进行检验。
首先,将刚刚爬取下来的数据通过以下代码:导出IP地址和端口信息,并保存为txt格式(该软件识别txt),代码如下。
import pandas as pd data = pd.read_csv(r'C:\Users\zhche\Desktop\IP_data.csv',sep=',',encoding='utf-8-sig') lists = data.values.tolist() for list in lists: IP = list[0] port = list[4] proxy = str(IP) + ':' + str(port) with open('ip.txt','a',encoding = 'utf-8') as f: f.write(proxy+'\n')
运行后,找到保存到本地的txt,如下:
然后,将该txt文件导入到花刺代理软件中,点击“验证全部”,结果如下。
没有看错,5000个IP中只有3个能用,得出一个至理——便宜没好货。
所以平时需要用数量来代替该不足,通过抓取上万个IP来寻找几个有用的。
万变ip便宜又好用
相关文章内容简介
1 代理ip软件详细教程:如何使用代理服务器进行网页抓取?
全文共2136字,预计学习时长7分钟图源:Unsplash万维网是数据的宝库。大数据的易得性、数据分析软件的迅猛发展以及日益廉价的计算能力进一步提高了数据驱动战略对竞争差异化的重要性。据Forrester的报告显示,数据驱动性公司利用并贯彻公司洞察力以创造竞争优势,年均增长率超过30%,并有望在2021年实现1.8万亿美元的收入。麦肯锡公司的研究表明,善于利用客户行为洞察力的公司在销售增长方面比同行高出85%,毛利率高出25%。然而,互联网定期持续地提供内容。在寻找与需求相关的数据时,这会造成混乱。此时网页抓取有助于提取符合要求和喜好的有用数据。因此,以下的基本内容可以帮助了解如何使用网页抓取来收集信息,以及如何有效使用代理服务器。什么是网页抓取?网页抓取或网页采集是从网页中提取相关要求和大量数据的技术。该信息以电子表格的形式储存在本地计算机中。对企业根据获得的数据分析来计划营销战略来说,这是非常有远见的。网页抓取促使企业快速创新,实时访问万维网中的数据。因此,如果你是一家电子商务公司并且正在收集数据,那么网页抓取应用程序将帮助你在竞争对手的网站... [阅读全文]
2 代理IP软件Crawler如何选择IP代理软件。
当我们学习各种编程语言时,有各种各样的异常现象是很常见的。以最简单、最基本的爬虫数据采集为例,我们将面临许多问题,如IP被封、爬行受限、非法操作等,所以在抓取数据之前,我们必须了解预抓取网站是否涉及非法操作,找到合适的代理IP访问网站等等。爬虫特工IP就像选择一部手机。注意cpu参数,摄像头参数,显示参数等..爬虫代理ip是否也有这样一套指引??其实也有,极地代理商结合爬虫用户的需求,总结了以下经验:。1、IP池很大,都知道爬虫用户,补充业务用户,对IP的数量有很大的要求。如果IP池不够大,它将无法满足业务,或者由于重复提取,IP将被阻止。2、覆盖整个城市、爬行动物在整个区域的业务需求过程中,所以IP的需求必须覆盖大多数城市,每个城市都有一定的数量。3,高匿名性4.稳定、不稳定的连接,经常离线,我认为无论这个代理人多么便宜,你都不会买它,对吗?5、真正的IP,对于爬虫用户真正的IP效率,业务成功率遥遥领先。以上是对爬虫用户IP代理的几个总结,根据这个索引选择代理IP,可以帮助你跳过大部分的陷阱。掘金的数量无穷小的IP代理,稳定性高,是许多爬虫工人... [阅读全文]
推荐阅读
24
2019-05
ip代理软件哪个好python爬虫代理ip服务商哪家好
ip代理软件哪个好python爬虫代理ip服务商哪家好
18
2019-08
对IP代理服务器软件爬虫IP代理服务的简要思考
对IP代理服务器软件爬虫IP代理服务的简要思考
31
2020-03
怎么辨别普通代理ip和短效代理ip?
代理IP是现在很多用户都需要的工具,很多地方都可以用的到。但代理IP也分为很多类型,不同类型的代理也有不同的区别。
29
2020-07
IP代理如何助力网络安全?
现在很多工作都需要依托网络才能顺利进行,尤其是网络工作者。但是如果想要提高工作效率只有网络是不够的,还需要借助其他的技术力量。代理IP就是提高工作效率的一种方便快捷的网络技
25
2019-06
使用拨号vps或代理ip软件的代理ip软件爬虫?.
使用拨号vps或代理ip软件的代理ip软件爬虫?.
20
2020-08
HTTP和HTTPS的区别与联系
HTTP 属于超文本传输协议,用来在 Internet 上传送超文本, HTTPS则是为安全超文本传输协议,在 HTTPS 基础上拥有更强的安全性,简单来在,HTTPS 是 HTTP 的安全版,是使用 TLS/SSL 加密的 HTTP 协议。
热门文章
因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨
免费试用