2023爬虫学习笔记 -- 批量获取免费代理

一、目标网址

https://www.XXXX.com/free

二、分析源码,我们要获取的是IP,PORT,位置

三、获取网页源码

目标地址="https://www.XXXX.com/free"
头={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
响应=requests.get(url=目标地址,headers=头)
响应.encoding="UTF-8"
#print(响应.text)
响应内容=响应.text

四、通过bs4获取关键数据

1、右击复制selector内容

#list > table > tbody > tr:nth-child(2) > td:nth-child(1)

2、适当修改,获取tr块里面的所有数据

sp=bs4.BeautifulSoup(响应内容,'lxml')
标题列表=sp.select('#list > table > tbody > tr')
print(标题列表)

3、通过findAll读取属性值

for a in 标题列表:
    IP=a.findAll("td")[0]
    PORT = a.findAll("td")[1]
    位置 = a.findAll("td")[4]
    print(IP.text,PORT.text,位置.text)

121.13.252.62 41564 广东省东莞市  电信
112.14.47.6 52024 浙江省宁波市  移动
117.114.149.66 55443 北京市海淀区 BJENET宽带网络 BGP多线
222.74.73.202 42055 内蒙古自治区赤峰市  电信
202.109.157.66 9000 江西省赣州市  电信
116.9.163.205 58080 广西壮族自治区钦州市  电信
27.42.168.46 55481 中国 广东 中山 联通
121.13.252.61 41564 广东省东莞市  电信
61.216.185.88 60808 中国 台湾 屏东县
61.216.156.222 60808 中国 台湾 cht.com.tw
121.13.252.58 41564 广东省东莞市  电信
202.109.157.65 9000 江西省赣州市  电信
121.13.252.60 41564 广东省东莞市  电信
210.5.10.87 53281 中国 上海  联通
117.94.116.240 9000 中国 江苏 泰州 电信

4、将内容写入到文件

fp=open("dl.txt","w",encoding="utf8")
for a in 标题列表:
    IP=a.findAll("td")[0]
    PORT = a.findAll("td")[1]
    位置 = a.findAll("td")[4]
    fp.write(IP.text+":"+PORT.text+"\t"+位置.text+"\n")
fp.close()

五、获取多页代理数据

1、获取第2页和第3页数据,发现网址只是在后面加上了2和3

https://www.XXXX.com/free/inha/2/
https://www.XXXXX.com/free/inha/3/

2、构造动态的目标地址

https://www.XXXXX.com/free/inha/%d/
目标地址=format(动态目标地址%pg)

3、完整源码

import time
import bs4
import requests
动态目标地址="https://www.XXXXX.com/free/inha/%d/"
头={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
fp = open("dl.txt", "w", encoding="utf8")
for pg in range(1,5):
    目标地址=format(动态目标地址%pg)
    响应=requests.get(url=目标地址,headers=头)
    time.sleep(2)
    响应.encoding="UTF-8"
    #print(响应.text)
    响应内容=响应.text
    sp=bs4.BeautifulSoup(响应内容,'lxml')
    标题列表=sp.select('#list > table > tbody > tr')
    #list > table > tbody > tr:nth-child(2) > td:nth-child(1)
    #print(标题列表)
    for a in 标题列表:
        IP=a.findAll("td")[0]
        PORT = a.findAll("td")[1]
        位置 = a.findAll("td")[4]
        fp.write(IP.text+":"+PORT.text+"\t"+位置.text+"\n")
fp.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值