首页 > 编程语言 >python3和scrapy使用亿牛云隧道代理问题以及代码

python3和scrapy使用亿牛云隧道代理问题以及代码

时间:2023-03-02 17:35:16浏览次数:33  
标签:亿牛云 code IP bytes host headers scrapy proxy python3

一、前言
近期,我参与了一个需要爬取国家食品药品监督局数据的项目,但该网站存在IP屏蔽机制。因此,我需要在Scrapy框架中实现自动IP切换,才能完成任务。然而,尽管我使用了第三方库scrapy-proxys和代理API接口,但测试并不成功。
爬取药监局数据是一项不容易完成的任务。这是因为该网站采用了多种反爬虫机制,如IP屏蔽、频率限制等,以避免窃取机密数据信息。因此,在实施这项任务时,我们需要使用各种技术工具和方法来克服这些障碍。
对于大多数企业,使用爬虫程序和库工具是一项不错的选择,其中最常用的是Scrapy和Python3。这些工具具有强大的功能,可以轻松地爬取网站上的数据。但要想成功抓取药监局的数据,我们还需要实现IP自动切换的功能,以确保IP被屏蔽后,程序可以顺利地继续运行下去。
亿牛云官方给出了python3和scrapy的参考示例
python3示例

import requests,random

#要访问的目标页面
target_url = "https://www.nmpa.gov.cn/"

#代理信息
proxy_host = "u6791.5.tn.16yun"
proxy_port = "31111"
proxy_user = "16EDRSSX"
proxy_pass = "214575"
proxy_meta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxy_host,
"port" : proxy_port,
"user" : proxy_user,
"pass" : proxy_pass,
}

#设置http和https访问都是用HTTP代理
proxies = {
"http": proxy_meta,
"https": proxy_meta
}

#设置IP切换头
tunnel = random.randint(1, 10000)
headers = {"Proxy-Tunnel": str(tunnel)}

try:
#访问目标页面
resp = requests.get(target_url, proxies=proxies, headers=headers)

#获取状态码和网页内容
status_code = resp.status_code
content = resp.text

#输出状态码和网页内容
print(f"status_code:{status_code}\ncontent:{content}")

except requests.exceptions.RequestException as e:
print(e)

import requests,random

#要访问的目标页面
target_url = "https://www.nmpa.gov.cn/"

#代理信息
proxy_host = "u6791.5.tn.16yun"
proxy_port = "31111"
proxy_user = "16EDRSSX"
proxy_pass = "214575"
proxy_meta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxy_host,
"port" : proxy_port,
"user" : proxy_user,
"pass" : proxy_pass,
}

#设置http和https访问都是用HTTP代理
proxies = {
"http": proxy_meta,
"https": proxy_meta
}

#设置IP切换头
tunnel = random.randint(1, 10000)
headers = {"Proxy-Tunnel": str(tunnel)}

try:
#访问目标页面
resp = requests.get(target_url, proxies=proxies, headers=headers)

#获取状态码和网页内容
status_code = resp.status_code
content = resp.text

#输出状态码和网页内容
print(f"status_code:{status_code}\ncontent:{content}")

except requests.exceptions.RequestException as e:
print(e)

以上是python的原本使用方式,下面提供scrapy的中间件示例

在项目中新建middlewares.py文件(./项目名/middlewares.py)

import base64
import sys

PY3 = sys.version_info[0] >= 3

def base64ify(bytes_or_str):
input_bytes = bytes_or_str if PY3 else bytes_or_str.encode('utf8')
output_bytes = base64.urlsafe_b64encode(input_bytes)
return output_bytes.decode('ascii') if PY3 else output_bytes

class ProxyMiddleware2(object):
def process_request(self, request, spider):
# 选择一个代理服务器
proxyHost = "u6791.5.tn.16yun"
proxyPort = "31111"

# 设置IP地址和端口号
request.meta['proxy'] = "http://{0}:{1}".format(proxyHost, proxyPort)

# 设置代理用户名和密码(根据需要开启/关闭)
# proxyUser = "16EDRSSX"
# proxyPass = "214587"
# request.headers['Proxy-Authorization'] = 'Basic ' + base64ify(proxyUser + ":" + proxyPass)

# 设置隧道(根据需要开启/关闭)
# tunnel = random.randint(1,10000)
# request.headers['Proxy-Tunnel'] = str(tunnel)

# 修改连接方式为Close,每次都切换到新的IP
request.headers['Connection'] = "Close"

在实现IP自动切换的功能之前,我们需要优先考虑的是网站可能存在的安全协议,如验证码。这些协议旨在防止机器人的恶意行为,例如恶意爬取数据,从而保护用户的隐私。虽然这些协议可确保网站安全,但却增加了我们爬取数据的难度。

同时,针对药监局数据的质量问题也需要考虑,如缺失数据、错误数据、重复数据等,这就需要对数据进行清洗和处理,以确保最终的数据质量。在处理数据时,我们必须小心谨慎,以避免产生不准确或不全面的数据,从而带来不必要的麻烦。

标签:亿牛云,code,IP,bytes,host,headers,scrapy,proxy,python3
From: https://www.cnblogs.com/mmz77-aa/p/17172620.html

相关文章

  • linux升级python3.6升级3.7
    1.下载到本地并解压wgethttps://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgztar-zvxfPython-3.7.12.tgzcdPython-3.7.122.编译安装./configure--......
  • ChatGPT: python3 查找在列表1中而不再列表2的项目
    A:f1_urls=['a','b']f2_urls=['a','c']python3中获取存在于f1_urls而不在f2_urls的项目Q:f1_urls=['a','b']f2_urls=['a','c']#将列表转换为集......
  • linux上安装python3(yum方式)
      可联通外网的linux系统终端上安装python31,建立yum仓库:https://mirrors.163.com/centos/7.9.2009/os/x86_64/2,使用yum下载安装对应包:#yum-ygroupinstall"De......
  • 登峰造极,师出造化,Pytorch人工智能AI图像增强框架ControlNet绘画实践,基于Python3.10
    人工智能太疯狂,传统劳动力和内容创作平台被AI枪毙,弃尸尘埃。并非空穴来风,也不是危言耸听,人工智能AI图像增强框架ControlNet正在疯狂地改写绘画艺术的发展进程,你问我绘画行......
  • scrapy框架图片爬取案例——以堆糖网为例
    本节主要分享的是scrapy框架中关于图片类的简单爬取方法,在这里只需要用到三个文件:1.setting.py进行scrapy抓取图片所用到的基础。2.duitang_spider.py实现获取多出url进......
  • Python3中zip()函数知识点总结
    1.引言在本文中,我将带领大家深入了解​​Python​​中的​​zip()​​函数,使用它可以提升大家的工作效率。闲话少说,我们直接开始吧!2.基础知识首先,我们来介绍一些基础知识......
  • Python3的AES加密和解密
    此加密和解密的秘钥的长度必须是16位、24位或者32位importbase64importosfromCrypto.CipherimportAES#AESkeymustbeeither16,24,or32byteslongaes_key="1......
  • python2代码转python3
    安装python337的参考:D:\Python3.5\Tools\scripts找到2to3.py文件执行命令转换单个文件或者目录D:\dev\python37\Tools\scripts>python2to3.py-wD:\dev\python37\To......
  • win7安装python3
    win7安装python3python官网显示python3.9以上已不支持win7,所以找一下python3.8NotethatPython3.9+cannotbeusedonWindows7orearlier.python3.8提供安装包的......
  • Mac 创建Python3虚拟环境
    Mac创建Python3虚拟环境1、安装virtualenvpip3installvirtualenv安装virtualenvwrapperpip3installvirtualenvwrapper创建所以.virtualenvs的隐藏文件夹存......