第二篇 - python爬取免费代理
代理的作用参考https://wenda.so.com/q/1361531401066511?src=140
免费代理很多,但也有很多不可用,所以我们可以用程序对其进行筛选。以能否访问百度为例。
1.获取网页内容。
import requests
url = "http://www.xicidaili.com/"
#获取网页源代码
def getData(url):
r = requests.get(url)
content = r.text
return content
getData(url)
对于一般网站像这样获取源代码就可以了,不过,这个网站有反爬机制,所以得用如下代码。
import requests
url = "http://www.xicidaili.com/"
#获取网页源代码
def getData(url):
header = {
'User-Agent': '',
'Accept': '',
'Accept-Encoding': '',
'Accept-Language': ''
}
session1 = requests.Session()
session1.headers.update(header)
r = session1.get(url)
content = r.text
return content
getData(url)
header里面的内容可以自己用浏览器访问网站,审查元素,network,F5刷新看到,然后填入相应位置。
2.获取免费代理ip和端口号。
import requests
import re
url = "http://www.xicidaili.com/"
#获取网页源代码
def getData(url):
header = {
'User-Agent': '',
'Accept': '',
'Accept-Encoding': '',
'Accept-Language': ''
}
session1 = requests.Session()
session1.headers.update(header)
r = session1.get(url)
content = r.text
return content
#获取免费IP和端口号
def getIp(content):
#ip格式为192.168.1.1,端口号为2或4为数字,与源代码进行匹配,取出ip和端口号
ip_port_tmp = "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)</td>[\n|\s]*<td>(\d{2,4})"
ip_port = re.findall(ip_port_tmp,content)
return ip_port
content = getData(url)
ip_port = getIp(content)
print(ip_port)
3.检验这些代理ip是否可以访问百度
import requests
import re
#获取网页源代码
def getData(url):
header = {
'User-Agent': '',
'Accept': '',
'Accept-Encoding': '',
'Accept-Language': ''
}
session1 = requests.Session()
session1.headers.update(header)
r = session1.get(url)
content = r.text
return content
#获取免费IP和端口号
def getIp(content):
#ip格式为192.168.1.1,端口号为2或4为数字,与源代码进行匹配,取出ip和端口号
ip_port_tmp = "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)</td>[\n|\s]*<td>(\d{2,4})"
ip_port = re.findall(ip_port_tmp,content)
return ip_port
def check_ip(ip_port):
url_baidu = "http://www.baidu.com/"
status = False
proxies = {
"http": f"{ip_port[0]}:{ip_port[1]}",
"https": f"{ip_port[0]}:{ip_port[1]}"
}
try:
r_baidu = requests.get(url_baidu, timeout=3, proxies=proxies)
L.append(proxies)
status = True
except Exception as e:
print(e)
pass
return status
if __name__ == '__main__':
url = "http://www.xicidaili.com/"#爬取免费ip
L = []#存储可用ip
content = getData(url)#获取网页源代码
ip_port = getIp(content)#获取免费ip
for item in ip_port:
check_ip(item)#得到可用的免费ip并存储到列表L中
print(L)
4.将L里面的Ip保存到txt文件中
with open('ip1.txt','w') as f:
for l in L:
f.write(l['http'])
f.write("\n")
补充:第三步检查速度有点慢,可以使用多线程进行优化。
import requests
import re
from multiprocessing.dummy import Pool as ThreadPool
#获取网页源代码
def getData(url):
header = {
'User-Agent': '',
'Accept': '',
'Accept-Encoding': '',
'Accept-Language': ''
}
session1 = requests.Session()
session1.headers.update(header)
r = session1.get(url)
content = r.text
return content
#获取免费IP和端口号
def getIp(content):
#ip格式为192.168.1.1,端口号为2或4为数字,与源代码进行匹配,取出ip和端口号
ip_port_tmp = "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)</td>[\n|\s]*<td>(\d{2,4})"
ip_port = re.findall(ip_port_tmp,content)
return ip_port
def check_ip(ip_port):
url_baidu = "http://www.baidu.com/"
status = False
proxies = {
"http": f"{ip_port[0]}:{ip_port[1]}",
"https": f"{ip_port[0]}:{ip_port[1]}"
}
try:
r_baidu = requests.get(url_baidu, timeout=3, proxies=proxies)
L.append(proxies)
status = True
except Exception as e:
# print(e)
pass
return status
if __name__ == '__main__':
url = "http://www.xicidaili.com/"#爬取免费ip
L = []#存储可用ip
content = getData(url)#获取网页源代码
ip_port = getIp(content)#获取免费ip
# for item in ip_port:
# check_ip(item)#得到可用的免费ip并存储到列表L中
pool = ThreadPool(30)
pool.map(check_ip, ip_port)
pool.close()
pool.join()
print(L)
此时已经抓取到了可用的免费ip
第二篇 - python爬取免费代理的更多相关文章
- 极简代理IP爬取代码——Python爬取免费代理IP
这两日又捡起了许久不碰的爬虫知识,原因是亲友在朋友圈拉人投票,点进去一看发现不用登陆或注册,觉得并不复杂,就一时技痒搞一搞,看看自己的知识都忘到啥样了. 分析一看,其实就是个post请求,需要的信息都 ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...
- golang爬取免费代理IP
golang爬取免费的代理IP,并验证代理IP是否可用 这里选择爬取西刺的免费代理Ip,并且只爬取了一页,爬取的时候不设置useAgent西刺不会给你数据,西刺也做反爬虫处理了,所以小心你的IP被封掉 ...
- 简单爬虫-爬取免费代理ip
环境:python3.6 主要用到模块:requests,PyQuery 代码比较简单,不做过多解释了 #!usr/bin/python # -*- coding: utf-8 -*- import ...
- PHP简单爬虫 爬取免费代理ip 一万条
目标站:http://www.xicidaili.com/ 代码: <?php require 'lib/phpQuery.php'; require 'lib/QueryList.php'; ...
- python爬取微信小程序(实战篇)
python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...
- 手把手教你使用Python爬取西刺代理数据(下篇)
/1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...
- python爬取github数据
爬虫流程 在上周写完用scrapy爬去知乎用户信息的爬虫之后,github上star个数一下就在公司小组内部排的上名次了,我还信誓旦旦的跟上级吹牛皮说如果再写一个,都不好意思和你再提star了,怕你们 ...
- c#批量抓取免费代理并验证有效性
之前看到某公司的官网的文章的浏览量刷新一次网页就会增加一次,给人的感觉不太好,一个公司的官网给人如此直白的漏洞,我批量发起请求的时候发现页面打开都报错,100多人的公司的官网文章刷新一次你给我看这个, ...
随机推荐
- MySQL执行语句的顺序
MySQL的语句一共分为11步,最先执行的总是FROM操作,最后执行的是LIMIT操作.其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有 ...
- Gatsby & React & NPX & NVM
Gatsby & React Gatsby is a blazing fast modern site generator for React. https://www.gatsbyjs.or ...
- Java权限访问修饰符
私有的,以 private 修饰符指定,在同一类内可见. 默认的,也称为 default,在同一包内可见,不使用任何修饰符. 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见 ...
- LTI系统对WSS Processes的作用
本文主要专注讨论LTI系统对WSS Process的影响.WSS Process的主要特性有mean以及correlation,其中correlation特性在滤波器设计,信号检测,信号预测以及系统识 ...
- 18mysql3
一.内外连接全连接,左右连接 █▓ 通过两张表查找其对应的记录. 隐式 内连接 select * from a,b where a.列名 = b.列名 █▓ 左连接 ...
- docker registry v2与harbor的搭建
docker的仓库 1 registry的安装 docker的仓库我们可以使用docker自带的registry,安装起来很简单,但是可能有点使用起来不是很方便.没有图形化. 开始安装 使用镜像加速器 ...
- Aizu2130-Billion Million Thousand-dp
用dp求出最大的表达,再用dp求出.//然而并没有想出来 #include <cstdio> #include <string> #include <algorithm& ...
- Codeforces1101G (Zero XOR Subset)-less 【线性基】【贪心】
题目分析: 考虑到这是一个区间的异或问题,不妨求出前缀和,令$sum[i] = Xor_{j=1}^{i}a[j]$. 对于区间$[l,r]$的异或结果,等于$sum[r] \oplus sum[l- ...
- BZOJ1001 洛谷4001 [BJOI2006]狼抓兔子 题解
题目 这个题目有多种解法,这个题也是一个比较经典的题了,正是因为他的多样的做法,这个题主要难在建图和优化,因为这是一个网格图,所以spfa肯定过不去,所以用最短路解法的话,只能用dij,而网络流也是要 ...
- 【XSY2720】区间第k小 整体二分 可持久化线段树
题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...