大家好,我是辣条。

一见不日甚是...应该是一日不见甚是想念【串台了,这是郭德纲老师相声里的梗】。

直接进入今天的主题,相信学过爬虫的朋友们都知道爬虫封ip十分头疼,辣条今天带你获取免费ip代理

爬取目标

网址:站大爷

工具使用

开发环境:win10、python3.7 开发工具:pycharm、Chrome 工具包:requests,lxml

项目思路解析

请求目标网页地址 从静态网页中提取出ip地址(端口图片暂时不做处理)

通过xpath的方式提取出对应的网页数据 提取下来的数据是进行加密的

提取数据的代码

session = requests.session()
url = 'https://www.zdaye.com/FreeIPList.html'
response = session.get(url, headers=headers)
data = response.content.decode()
html_object = etree.HTML(data)
data_list = html_object.xpath('//*[@id="ipc"]/tbody/tr')
​
ip_list = []
for tr in data_list:ipnum = tr.xpath('./td[1]/text()')[0]ipnum2 = tr.xpath('./td[1]/@v')[0]ip_list.append((ipnum, ipnum2))

找到数据的加密方法 查看是否为动态加载的数据

并不是动态数据 找到加密的js文件

打断点调试js代码

解析对应的加密函数

def sdfsgfdg(s):s2 = s.split('m')ts = ''for i in range(len(s2) - 1, -1, -1):ts += chr(int(s2[i]) - 352)return ts
​
​
def MD5(p):return hashlib.md5((p).encode()).hexdigest().upper()
​
​
def get_keyurl(mk, ak):url = 'https://www.zdaye.com/' + mk + "_" + MD5(MD5(sdfsgfdg(mk) + "beiji" + ak)) + '.gif'return url
​
​
def dsfgsd(s, kk):s2 = s.split('#')ts = ''for i in range(len(s2) - 1, -1, -1):ts += chr(int(s2[i]) - kk)
​return ts
​
​
t = str(time.strftime('%Y/%m/%d %H:%M:%S',time.localtime())).replace(' ', "%20").replace("/0", "/")
new_url = 'https://www.zdaye.com/js/base.js?' + t
pp = session.get(new_url, headers=headers)
mk = re.findall('mk = "(.*?)";', pp.text)[0]
ak = re.findall('ak = "(.*?)";', pp.text)[0]
key_url = get_keyurl(mk, ak)
key = session.get(key_url, headers=headers)

out函数从html页面获取到td的v标签数据进行解析 showm为MD5的加密方法

简易源码分享

import re
import time
import requests
from lxml import etree
import hashlib
​
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36','Referer': 'https://www.zdaye.com/FreeIPList.html',
}
​
def sdfsgfdg(s):s2 = s.split('m')ts = ''for i in range(len(s2) - 1, -1, -1):ts += chr(int(s2[i]) - 352)return ts
​
​
def MD5(p):return hashlib.md5((p).encode()).hexdigest().upper()
​
​
def get_keyurl(mk, ak):url = 'https://www.zdaye.com/' + mk + "_" + MD5(MD5(sdfsgfdg(mk) + "beiji" + ak)) + '.gif'return url
​
​
def dsfgsd(s, kk):s2 = s.split('#')ts = ''for i in range(len(s2) - 1, -1, -1):ts += chr(int(s2[i]) - kk)return ts
​
session = requests.session()
url = 'https://www.zdaye.com/FreeIPList.html'
response = session.get(url, headers=headers)
data = response.content.decode()
html_object = etree.HTML(data)
data_list = html_object.xpath('//*[@id="ipc"]/tbody/tr')
ip_list = []
for tr in data_list:ipnum = tr.xpath('./td[1]/text()')[0]ipnum2 = tr.xpath('./td[1]/@v')[0]ip_list.append((ipnum, ipnum2))
t = str(time.strftime('%Y/%m/%d %H:%M:%S',time.localtime())).replace(' ', "%20").replace("/0", "/")
new_url = 'https://www.zdaye.com/js/base.js?' + t
pp = session.get(new_url, headers=headers)
# print(pp.text)
mk = re.findall('mk = "(.*?)";', pp.text)[0]
ak = re.findall('ak = "(.*?)";', pp.text)[0]
key_url = get_keyurl(mk, ak)
key = session.get(key_url, headers=headers)
key = int(key.text)
new_ip = []
for info in ip_list:ip = info[0].replace("wait", (dsfgsd(info[1], key)))new_ip.append(ip)
​
print(new_ip)

欢迎大家在评论中讨论交流技术呀,能帮到你的话记得给辣条三连哦!

你爱我,我爱你,IP被封很头疼【Python爬虫实战:ip代理js逆向采集】相关推荐

  1. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  2. 怎样使用python爬虫获得免费代理IP

    怎样使用python爬虫获得免费代理IP 进行爬取和测试有效性 总结 爬虫一直是python使用的一个重要部分,而许多网站也为此做了许多反爬措施,其中爬虫访问过于频繁直接封ip地址也作为一种" ...

  3. python爬虫request设置代理IP原理

    在我们书写爬虫程序的时候,可能都多多少少会遇到ip被封的问题,或者说ip被限制的问题,那么就需要用到ip代理了,那么ip代理在request里面的原理究竟是怎么实现的呢?下面来了解一下. 单个ip设置 ...

  4. Python爬虫实战之:快代理搭建IP代理池(简版)

    目录 前言 项目背景 项目简介 前期准备 讲解1:项目搭建 讲解2:安装 faker 库获取user-agent 讲解3:分析 "快代理" 页面 讲解4:筛选有效IP 讲解5:Pa ...

  5. 网页爬虫使用代理IP的几种方案,爬虫如何设置代理?

    不少网络公司在进行爬虫数据业务的时候,都会选择代理IP,网页爬虫在现如今非常常见,尤其是一些大数据处理公司,都会使用爬虫的方式来进行信息的抓取,而要想进行信息的精准抓取,那就必须使用靠谱且稳定的代理I ...

  6. 数据:快来爬我呀!小白:ip被封了 数据:做个ip代理池吧!这样就可以继续爬我了

    原标题:运用Python做一个ip代理池 前言: 作为对Python爬虫才一点的进步的小白,我对于IP代理池也不是很理解,如果没有达到读者的要求,还请见谅!我今天写的这篇文章主要是讲运用Python爬 ...

  7. python 爬虫如何使用代理IP

    python3 爬虫如何使用代理IP 前言 众所周知,爬虫速度过快,频繁访问都会被封IP,怎么解决这个问题呢?再去换一台设备?先不说数据是否同步,仅仅换个设备的成本就不低,这个时候就需要代理IP了.以 ...

  8. 干货|Python爬虫如何设置代理IP

    在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败.高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,这里讲述 ...

  9. 干货分享,使用python爬虫构建免费代理IP池

    在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,那如何解决呢?使用代 ...

最新文章

  1. IBM Bluemix云计算大会见闻
  2. mysql phpmyadmin 修改下一个自增值的开始位置 计数重置
  3. 开发日记-20190819 关键词 随便聊聊
  4. Fabricjs在Canvas上插入照片并设置缩小和翻转属性
  5. mysql varchar 225 和 varchar 60 区别
  6. dedeampz mysql启动不了_localhost打不开?dedeampz环境启动不了?本地php环境启动失败?...
  7. AOP概述及实现原理
  8. 用redis解决超卖
  9. Cocopods的升级错误解决
  10. 【qduoj - 纳新题】凑数题(恰好装满类0-1背包 或 母函数)
  11. Linux系统编程10:进程入门之系统编程中最重要的概念之进程进程的相关操作使用fork创建进程
  12. idea如何全局查找和替换
  13. windows环境下面安装neo4j出错记录
  14. 第003讲 无序列表 有序列表 框架
  15. c语言中,x-y,'105',ab,7f8那个是正确的,C语言习题册
  16. 【光学】Matlab实现色散曲线拟合
  17. 正弦信号与噪声信号仿真生成实测信号,自相关分析
  18. 大数据技术应用需要注意什么?
  19. Java华氏度与摄氏度之间的转换
  20. 科技爱好者周刊(第 160 期):中年码农的困境

热门文章

  1. 关于spring注入
  2. Java彻底 - WEB容器的侦听具体解释 ServletContextListener
  3. JFreechart 在linux下不显示及中文乱码问题
  4. Eclipse搭建SSH环境实现Struts2分页显示mysql数据库表中内容
  5. 学习c/c++的50个好网站(转)
  6. C++11 强类型枚举
  7. C++11 range-based for loop
  8. Webpack + vue + es6 安装
  9. Centos7安装mongodb
  10. 开发函数计算的正确姿势 —— 排查超时问题