bs4练习

news/2024/7/7 21:38:07

bs4练习

  • 工具
  • 目的
  • 代码
  • 运行结果

工具

pycharm

目的

'''
网址:http://ip.yqie.com/ipproxy.htm,原url不能用,更换url为:http://www.66ip.cn/index.html
用bs4来做一个简单的爬虫,爬取某个ip网址里的免费ip,获取每个ip的代理IP地址、端口、服务器地址、是否匿名、类型、存活时间
'''

代码

import requests
from bs4 import BeautifulSoup
import json

ip_agents = []

for i in range(1,11):  # 提取前10页
    if i == 1:
        url_str = 'index'
    else:
        url_str = str(i)
    url = f'http://www.66ip.cn/{url_str}.html'
    headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    response = requests.get(url,headers=headers)
    response.encoding = 'gb2312'
    # print(response.text)
    soup = BeautifulSoup(response.text,'lxml')
    ip_content = soup.select('div[class="containerbox boxindex"] table tr')[1:]
    # print(ip_content)

    for ip_tr in ip_content:
        # print(ip_tr)
        ip_agent = {}
        ip_agent['ip'] = ip_tr.select('td:first-child')[0].getText()
        ip_agent['port'] = ip_tr.select('td:nth-child(2)')[0].getText()
        ip_agent['address'] = ip_tr.select('td:nth-child(3)')[0].getText()
        ip_agent['type'] = ip_tr.select('td:nth-child(4)')[0].getText()
        ip_agent['verify_time'] = ip_tr.select('td:last-child')[0].getText()
        ip_agents.append(ip_agent)

with open('ip_agents.json','w',encoding='utf-8') as f:
    json.dump(ip_agents,f,ensure_ascii=False,indent=2)

运行结果

见资源


http://lihuaxi.xjx100.cn/news/1441406.html

相关文章

Vue中路由缓存问题及解决方法

一.问题 Vue Router 允许你在你的应用中创建多个视图,并根据路由来动态切换这些视图。默认情况下,当你从一个路由切换到另一个路由时,Vue Router 会销毁前一个路由的组件实例并创建新的组件实例。然而,有时候你可能希望保持一些页…

Web 自动化测试学会这一招,下班至少早一小时

♥ 前 言 大家都知道,我们在通过 Selenium 执行 Web 自动化测试时,每次都需要启动/关闭浏览器,如果是多线程执行还会同时打开多个,比较影响工作的正常进行。那有没有办法可以不用让浏览器的自动化执行干扰我们的工作呢&#xf…

剑指 Offer 46. 把数字翻译成字符串(动态规划)

文章目录 题目描述思路分析完整代码 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多…

Controller是单例还是多例?

Controller是单例还是多例? controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。 我们下面来简单的验证下: package com.riemann.springbootdemo.controller;import org…

章节4:Burp Target模块

章节4:Burp Target模块 Burp渗透测试流程 01 Target模块的作用 与HTTP History的区别 HTTP History按时间顺序记录Target按主机或者域名分类记录(字母顺序) Target模块的作用 把握网站的整体情况对一次工作的域进行分析分析网站存在的攻…

使用GraphQL在Postman中进行API测试

GraphQL 是一种用于API的开源数据查询和操作语言,用于API的查询语言和运行时。它使客户端能够精确地指定其数据需求,并获得预测性地结果。GraphQL旨在提高API的效率、灵活性和可靠性。 Postman 是一款用于API开发的强大工具,它支持REST和Gra…

【ARM 嵌入式 C 入门及渐进 9 --- 代码优化的经验与方法】

文章目录 1.1 简介1.1.1 整形数1.1.2 除法和取余数1.1.3 合并除法和取余数1.1.4 通过2的幂次进行除法和取余数1.1.5 取模的一种替代方法 1.2 变量1.2.1 使用数组下标1.2.2 全局变量1.2.3 使用别名1.2.4 变量的生命周期分割1.2.5 变量类型1.2.6 局部变量1.2.7 指针1.2.8 指针链 …

【java面向对象中static关键字】

提纲 static修饰成员变量static修饰成员变量的应用场景static修饰成员方法static修饰成员方法的应用场景static的注意事项static的应用知识:代码块static的应用知识:单例设计模式 static静态的意思,可以修饰成员变量,成员方法&a…