返回顶部
首页 > 资讯 > 后端开发 > Python >千锋扣丁学堂Python培训之代理IP
  • 528
分享到

千锋扣丁学堂Python培训之代理IP

丁学堂千锋扣IP 2023-01-31 08:01:50 528人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

今天千锋扣丁学堂python培训老师给大家分享一篇Python代理IP爬虫新手使用的详细介绍,首先python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初

今天千锋扣丁学堂python培训老师给大家分享一篇Python代理IP爬虫新手使用的详细介绍,首先python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级阶段,添加headers和ip代理可以解决很多问题。

运行环境

python3.7,PyCharm

这些需要大家直接去搭建好环境...

准备工作

爬取IP地址的网站(国内高匿代理)

校验IP地址的网站

爬取IP的完整代码

PS:简单的使用bs4获取IP和端口号,没有啥难度,里面增加了一个过滤不可用IP的逻辑

关键地方都有注释了

import requests
from bs4 import BeautifulSoup
import JSON

class GetIp(object):
"""抓取代理IP"""

def __init__(self):
"""初始化变量"""
self.url = 'Http://www.xicidaili.com/nn/'
self.check_url = 'https://www.ip.cn/'
self.ip_list = []

@staticmethod
def get_html(url):
"""请求html页面信息"""
header = {
'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
try:
request = requests.get(url=url, headers=header)
request.encoding = 'utf-8'
html = request.text
return html
except Exception as e:
return ''

def get_available_ip(self, ip_address, ip_port):
"""检测IP地址是否可用"""
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
ip_url_next = '://' + ip_address + ':' + ip_port
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
try:
r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)
html = r.text
except:
print('fail-%s' % ip_address)
else:
print('success-%s' % ip_address)
soup = BeautifulSoup(html, 'lxml')
div = soup.find(class_='well')
if div:
print(div.text)
ip_info = {'address': ip_address, 'port': ip_port}
self.ip_list.append(ip_info)

def main(self):
"""主方法"""
web_html = self.get_html(self.url)
soup = BeautifulSoup(web_html, 'lxml')
ip_list = soup.find(id='ip_list').find_all('tr')
for ip_info in ip_list:
td_list = ip_info.find_all('td')
if len(td_list) > 0:
ip_address = td_list[1].text
ip_port = td_list[2].text
# 检测IP地址是否有效
self.get_available_ip(ip_address, ip_port)
# 写入有效文件
with open('ip.txt', 'w') as file:
json.dump(self.ip_list, file)
print(self.ip_list)

if name == '__main__':
get_ip = GetIp()
get_ip.main()

使用方法完整代码

PS:主要是通过使用随机的IP来爬取,根据request_status来判断这个IP是否可以用.

为什么要这样判断?主要是虽然上面经过了过滤,但是不代表在你爬取的时候是可以用的,所以还是得多做一个判断.

from bs4 import BeautifulSoup
import datetime
import requests
import json
import random

ip_random = -1
article_tag_list = []
article_type_list = []

def get_html(url):
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
global ip_random
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
while request_status != 200:
ip_random = -1
ip_rand, proxies = get_proxie(ip_random)
print(proxies)
try:
request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
except:
request_status = 500
else:
request_status = request.status_code
print(request_status)
ip_random = ip_rand
request.encoding = 'gbk'
html = request.content
print(html)
return html

def get_proxie(random_number):
with open('ip.txt', 'r') as file:
ip_list = json.load(file)
if random_number == -1:
random_number = random.randint(0, len(ip_list) - 1)
ip_info = ip_list[random_number]
ip_url_next = '://' + ip_info['address'] + ':' + ip_info['port']
proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
return random_number, proxies

if name == '__main__':
"""只是爬取了书籍的第一页,按照评价排序"""
start_time = datetime.datetime.now()
url = 'https://book.douban.com/tag/?...'
base_url = 'https://book.douban.com/tag/'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
article_tag_list = soup.find_all(class_='tag-content-wrapper')
taGCol_list = soup.find_all(class_='tagCol')

for table in tagCol_list:
""" 整理分析数据 """
sub_type_list = []
a = table.find_all('a')
for book_type in a:
sub_type_list.append(book_type.text)
article_type_list.append(sub_type_list)

for sub in article_type_list:
for sub1 in sub:
title = '==============' + sub1 + '=============='
print(title)
print(base_url + sub1 + '?start=0' + '&type=S')
with open('book.text', 'a', encoding='utf-8') as f:

f.write('\n' + title + '\n')
f.write(url + '\n')

for start in range(0, 2):

# (start * 20) 分页是0 20 40 这样的
# type=S是按评价排序
url = base_url + sub1 + '?start=%s' % (start * 20) + '&type=S'
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
li = soup.find_all(class_='subject-item')
for div in li:
 info = div.find(class_='info').find('a')
 img = div.find(class_='pic').find('img')
 content = '书名:<%s>' % info['title'] + ' 书本图片:' + img['src'] + '\n'
 print(content)
 with open('book.text', 'a', encoding='utf-8') as f:
  f.write(content)

end_time = datetime.datetime.now()
print('耗时: ', (end_time - start_time).seconds)

以上就是关于千锋扣丁学堂Python培训之代理IP爬虫新手使用的全部内容,想要了解更多关于Python和人工智能方面内容的小伙伴,请关注扣丁学堂Python培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的python开发环境搭建视频,Python培训后的前景无限,行业薪资和未来的发展会越来越好的,扣丁学堂老师精心推出的Python视频教程定能让你快速掌握Python从入门到精通开发实战技能。扣丁学堂Python技术交流群:279521237。

--结束END--

本文标题: 千锋扣丁学堂Python培训之代理IP

本文链接: https://lsjlt.com/news/193091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 千锋扣丁学堂Python培训之代理IP
    今天千锋扣丁学堂Python培训老师给大家分享一篇Python代理IP爬虫新手使用的详细介绍,首先Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初...
    99+
    2023-01-31
    丁学堂 千锋扣 IP
  • 千锋扣丁学堂Python培训之Web版
    今天千锋扣丁学堂Python培训老师给大家分一篇关于PythonWeb版语音合成实例详解,首先语音合成技术能将用户输入的文字,转换成流畅自然的语音输出,并且可以支持语速、音调、音量设置,打破传统文字式人机交互的方式,让人机沟通更自然,下面...
    99+
    2023-01-31
    丁学堂 千锋扣 Web
  • 千锋扣丁学堂Python培训之操作Ex
    今天千锋扣丁学堂Python培训老师给大家分享一篇关于Python3操作Excel文件(读写)的简单实例详解,首先来安装版本安装的版本为0.9.3,但是官网的介绍还是关于Version0.7.3版本的,无妨,不影响理解。 安装 读Exce...
    99+
    2023-01-31
    操作 千锋扣 丁学堂
  • 千锋扣丁学堂Python培训之详解实现
    今天千锋扣丁学堂Python培训老师给大家分享一篇关于Python两台电脑实现TCP通信的方法示例,文中通过示例代码介绍的非常详细,首先比如为了实现Nao机器人与电脑端的TCP通信,于是研究了一下Python实现TCP通信,在网上也看到了...
    99+
    2023-01-31
    详解 千锋扣 丁学堂
  • 千锋扣丁学堂Python培训之开发一个
    今天千锋扣丁学堂Python培训老师给大家分享一篇关于如何利用Python开发一个简单的猜数字游戏的详细介绍,文中通过示例代码介绍的非常详细下面我们一起来看一下吧。 游戏规则 玩家将猜测一个数字。如果猜测是正确的,玩家赢。如果不正确,程序...
    99+
    2023-01-31
    千锋扣 丁学堂 Python
  • 千锋扣丁学堂Python培训之黑客们会
    今天千锋扣丁学堂Python培训老师给大家分享一篇关于黑客们会用到哪些关于Python技术的详细介绍,首先Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测...
    99+
    2023-01-31
    黑客 千锋扣 丁学堂
  • 千锋扣丁学堂Python培训之十个安全
    今天千锋扣丁学堂Python培训老师给大家分享一篇关于初学者学习Python中的10个安全漏洞以及如何修复漏洞的方法。比如在写代码的过程中,我们的总会遇见各式各样的大坑小坑。Python也不例外,在使用模块或框架时,也存在着许多糟糕的实例...
    99+
    2023-01-31
    千锋扣 丁学堂 Python
  • 扣丁学堂Python培训之Python
    今天千锋扣丁学堂Python培训老师给大家分享一篇关于python3字符串操作总结的详细介绍,中通过示例代码介绍的非常详细,下面我们一起来看一下吧。 字符串截取 s = 'hello's[0:3]'he's[:] #截取全部字符'hell...
    99+
    2023-01-31
    丁学堂 Python
  • 扣丁学堂Python培训之基于itch
    今天扣丁学堂Python培训老师给大家分享一个基于itchat模块实现微信防撤回的案例,比如有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。 环境要求 P...
    99+
    2023-01-31
    丁学堂 Python itch
  • 扣丁学堂Python培训简述Pytho
    本篇文章扣丁学堂Python培训小编给读者们分享一下Python线程池模块ThreadPoolExecutor用法,文中结合实例形式分析了Python线程池模块ThreadPoolExecutor的导入与基本使用方法,对此感兴趣的小伙伴就...
    99+
    2023-01-31
    丁学堂 Python Pytho
  • 扣丁学堂Python培训详解Pytho
    Python生成器与迭代器对于喜欢Python开发的小伙伴们来说应该是不陌生的,不了解的小伙伴也没有关系,本篇文章扣丁学堂Python培训小编就给小伙伴们详解一下Python生成器与迭代器,感兴趣的小伙伴就随小编来了解一下吧。 列表生成式...
    99+
    2023-01-31
    详解 丁学堂 Python
  • 扣丁学堂Python培训简述如何用Py
    本篇文章扣丁学堂Python培训小编给大家介绍一下如何用Python实现播放音频和录音功能,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,感兴趣的小伙伴就随小编一起来了解一下吧。 三种播放音频的方式...
    99+
    2023-01-31
    如何用 丁学堂 Python
  • 扣丁学堂Python培训详解如何在Ap
    对Python开发技术感兴趣的小伙伴是否知道如何在Apache中运行Python WSGI应用呢不知道的小伙伴也没有关系,本篇文章扣丁学堂Python培训小编就给读者们分享一下如何在Apache中运行Python WSGI应用,对此感兴趣...
    99+
    2023-01-31
    详解 如何在 丁学堂
  • 扣丁学堂区块链培训简述用Django实
    对数字货币的崛起感到新奇的我们,一定想知道其背后的技术——区块链是怎样实现的。本篇文章扣丁学堂区块链培训小编给读者们分享一下用Django实现一个可运行的区块链应用,感兴趣的小伙伴就随小编来了解一下吧。 准备工作 本文要求读者对Pytho...
    99+
    2023-01-31
    区块 丁学堂 Django
  • python学习-Selenium爬虫之使用代理ip的方法
     今天给大家分享的是如何在爬取数据的时候防止IP被封,今天给大家分享两种方法,希望大家可以认真学习,再也不用担心被封IP啦。第一种:降低访问速度,我们可以使用time模块中的sleep,使程序每运行一次后就睡眠1s,这样的话就可以...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作