首页 > 编程语言 >Python3网络爬虫浓缩系列

Python3网络爬虫浓缩系列

时间:2023-05-14 23:32:18浏览次数:5900  
标签:__ www request 爬虫 浓缩 opener cookie com Python3


本文参考与Jack-Cui 的python3网络爬虫入门系列 

领悟:python的灵活性远远超过了我的想象 我们没有必要写一样的代码,但是我们可以学习不同的思路!!!!

Python3网络爬虫(一):利用urllib进行简单的网页抓取

# -*- coding: UTF-8 -*-
from urllib import request

import chardet

if __name__ == "__main__":
    # 访问网页
    response = request.urlopen("http://fanyi.baidu.com")
    # 获取内容
    html = response.read()
    # 得到编码
    charset=chardet.detect(html)
    # 转码
    res=html.decode(charset['encoding']);
    # 写入文件
    with open('a.html',encoding='utf-8',mode='w')as f:
        f.write(res)

 Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果

# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json

if __name__ == "__main__":
    #对应上图的Request URL
    Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link'
    #创建Form_Data字典,存储上图的Form Data
    Form_Data = {}
    Form_Data['type'] = 'AUTO'
    Form_Data['i'] = 'Jack'
    Form_Data['doctype'] = 'json'
    Form_Data['xmlVersion'] = '1.8'
    Form_Data['keyfrom'] = 'fanyi.web'
    Form_Data['ue'] = 'ue:UTF-8'
    Form_Data['action'] = 'FY_BY_CLICKBUTTON'
    #使用urlencode方法转换标准格式
    data = parse.urlencode(Form_Data).encode('utf-8')
    #传递Request对象和转换完格式的数据
    response = request.urlopen(Request_URL,data)
    #读取信息并解码
    html = response.read().decode('utf-8')
    #使用JSON
    translate_results = json.loads(html)
    #找到翻译结果
    translate_results = translate_results['translateResult'][0][0]['tgt']
    #打印翻译信息
    print("翻译的结果是:%s" % translate_results)

此方法与今天已经被和谐,,上了n多算法进去,会提示翻译的结果是:您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”

 

Python3网络爬虫(三):urllib.error异常

# -*- coding: UTF-8 -*-
from urllib import request
from urllib import error

if __name__ == "__main__":
    # try catch 处理 保证了代码的健壮性
    #一个不存在的连接
    url = "http://www.douyua.com/Jack_Cui.html"
    # URLError
    # [Errno 11001] getaddrinfo failed
    url = "http://www.douyu.com/Jack_Cui.html"
    # HTTPError
    # 403
    
    req = request.Request(url)
    try:
        responese = request.urlopen(req)
    except error.URLError as e:
        if hasattr(e, 'code'):
            print("HTTPError")
            print(e.code)
        elif hasattr(e, 'reason'):
            print("URLError")
            print(e.reason)

Python3网络爬虫(四):使用User Agent和代理IP隐藏身份

常见的User Agent

1.Android

Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
 Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
 Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
 2.FirefoxMozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
 Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
 3.Google ChromeMozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
 Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
 4.iOSMozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
 Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
     上面列举了Andriod、Firefox、Google Chrome、iOS的一些User Agent,直接copy就能用。

理IP选取

    在写代码之前,先在代理IP网站选好一个IP地址,推荐西刺代理IP。

    URL:http://www.xicidaili.com/

  编写代码访问http://www.whatismyip.com.tw/,该网站是测试自己IP为多少的网址,服务器会返回访问者的IP。

用法

import requests, sys
url = 'https://www.yzwlzy.com/'
proxy = {
    'http':'27.155.83.126:8081',
    'http':'58.54.136.82:9999'
}
try:
    headers={
        'User-Agent':'Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0'
    }
    response = requests.get(url, proxies=proxy, timeout=5,headers=headers)

    print(response.text)
    print(response.content.decode('utf-8'))
except requests.exceptions.ConnectionError:
    print('超时')

Python3网络爬虫(五):Python3安装Scrapy

1.直接使用指令pip3 install scrapy,发现有诸多错误。

building 'twisted.test.raiser' extension
    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

解决方案

http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载twisted对应版本的whl文件(如我的Twisted‑17.5.0‑cp36‑cp36m‑win_amd64.whl),cp后面是python版本,amd64代表64位,运行命令:

pip install C:\Users\CR\Downloads\Twisted-17.5.0-cp36-cp36m-win_amd64.whl
  • 其中install后面为下载的whl文件的完整路径名 

安装完成后,再次运行:

pip install Scrapy

即可成功。

Python3网络爬虫(六):Python3使用Cookie-

cookie这一个 概念很重要,如果要学协议的话,就必须懂得cookie是什么东西所以不懂的话 请花费些许时间去了解一下

打印cookie

def getCookie():
    # 声明一个CookieJar对象来保存cookie
    cookie = cookiejar.CookieJar();
    # 利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
    handler = request.HTTPCookieProcessor(cookie)
    # 通过CookieHandler创建opener
    opener = request.build_opener(handler)
    # 此处的open方法打开网页
    opener.open("https://www.yzwlzy.com")
    # 打印cookie信息
    for item in cookie:
        print("Name=%s" % item.name)
        print("Value=%s" % item.value)

保存cookie到本地。。之前不会api还用序列化方式读取和保存的  可以参考下使用序列化保存和读取cookie

def saveCookie2File():
    # 设置保存cookie的文件,同级目录下的cookie
    filename = 'cookie.txt'
    # 声明一个MozillaCookieJar对象来保存cookie。之后写入文件
    cookie = cookiejar.MozillaCookieJar(filename)
    # 理由urlib.request库中的HTTPCookieProcessor对象来创建cookie处理器 也就CookieHandler
    handler = request.HTTPCookieProcessor(cookie)
    opener = request.build_opener(handler);
    opener.open("https://www.yzwlzy.com")
    cookie.save(ignore_discard=True, ignore_expires=True)
    pass

从本地读取

def readCookie2File():
    fileName = 'cookie.txt';
    # 创建MozillaCookieJar实例对象
    cookie = cookiejar.MozillaCookieJar();
    # 从文件中读取cookie内容到变量
    cookie.load(fileName, ignore_discard=True, ignore_expires=True);
    # 利用urllib.request库中农的HTPPCookieProcessor对象来创建cookie处理器,也就CookieHandler
    handler = request.HTTPCookieProcessor(cookie)
    # 通过opener的open方法打开网页
    opener = request.build_opener(handler)
    # 此用opener的open方法打开网页
    response = opener.open('https://www.yzwlzy.com');
    # 打印信息
    print(response.read().decode('utf-8'))
    pass

到项目上就可以灵活的应用,

def loginMyWebSite():
    userName = '马赛克emmmm';
    password = '马赛克emmmm';
    url = 'https://www.yzwlzy.com/login.php';
    url_index='https://www.yzwlzy.com/'
    fileName = 'yzwlzy_cookie.txt';
    if os.path.isfile(fileName):
        # 有缓存,就直接使用
        cookie = cookiejar.MozillaCookieJar();
        cookie.load(fileName,ignore_discard=True,ignore_expires=True);
        cppkie_support = request.HTTPCookieProcessor(cookie);
        opener = request.build_opener(cppkie_support);
        response=opener.open(url_index)
        html = response.read().decode('utf-8')
        res = re.findall('管理员:(.*?)                                <', html)
        print(res)
        return True
    else:
        # 没有文件 就创建文件缓存
        cookie = cookiejar.MozillaCookieJar(fileName);
        cppkie_support = request.HTTPCookieProcessor(cookie);
        opener = request.build_opener(cppkie_support);
    data = {
        'username': userName,
        'password': password,
        'gourl': '/index.php',
    }
    # 使用urlencode方法转换标准格式
    datepostdata = parse.urlencode(data).encode('utf-8');
    req = request.Request(url=url, data=datepostdata)
    try:
        response = opener.open(req);
        html = response.read().decode('utf-8')
        res = re.findall('管理员:(.*?)                                <', html)
        if (len(res) == 1 and res[0] == userName):
            # 登录成功保存缓存
            cookie.save(ignore_discard=True,ignore_expires=True)
            print(res)
            return True
    except error.URLError as e:
        if hasattr(e, 'code'):
            print("HTTP Error:%d" % e.code)
        elif hasattr(e, 'reason'):
            print('URLError:%s' % e.reason)
    return False
    pass

 

标签:__,www,request,爬虫,浓缩,opener,cookie,com,Python3
From: https://blog.51cto.com/u_14523369/6275399

相关文章

  • 爬虫案例之有道翻译execjs改写(JS代码改良版)
    网易有道翻译之逆向破解[execjs代码改写]网址:https://fanyi.youdao.com/index.html#/***用到的知识点:(1)requests模块和session模块,发起请求什么是session对象?该对象和requests模块用法几乎一致.对于在请求过程中产生了cookie的请求如果该请求是使用session发起的,则co......
  • 爬虫案例之网易有道翻译Python代码改写
    网易有道翻译之逆向破解[Python代码改写]网址:https://fanyi.youdao.com/index.html#/***用到的知识点:(1)requests模块和session模块,发起请求什么是session对象?该对象和requests模块用法几乎一致.对于在请求过程中产生了cookie的请求如果该请求是使用session发起的,则co......
  • 爬虫案例之网易有道翻译JS代码复杂版
    网易有道翻译逆向案例本次案例逆向的是网易有道云翻译https://fanyi.youdao.com/index.html#/用到的知识包括requests模块及方法md5加密js代码环境的补全【一】分析网站(1)网站页面如图(2)抓包(3)分析抓到的包逐个查看每个包的标头和载荷在webtranslate这个......
  • 在python3.7+中优雅的使用dataclass
    [本文出自天外归云的博客园]在Python3.7+中,dataclasses是一个非常优雅的工具,可以轻松地创建简单的类,并自动生成常见的类方法,比如 __init__、__repr__ 等。以下是一些使用dataclasses时需要注意的事项:导入dataclasses模块在使用dataclasses之前,需要先导入datacla......
  • java爬虫如何使用代理
    在Java程序中使用代理是爬取网站数据的常见技术之一。代理服务器允许你通过它来访问某个网站,从而让你可以隐藏自己的真实IP地址或者规避一些地理限制等问题。本文章将介绍如何使用Java实现网络爬虫代理。我们首先将介绍Java提供的代理相关类和方法,然后是如何编写代码实现代理网络......
  • 关于Python爬虫使用代理的问题
    当我们使用爬虫程序进行数据采集时,经常会遇到一些网站对爬虫的限制,例如IP封禁、访问频率限制等。为了解决这些问题,我们可以使用代理服务器来进行爬虫操作。本文将介绍爬虫代理的相关知识。一、什么是爬虫代理?爬虫代理是指在爬虫程序中使用代理服务器进行数据采集的一种方式。代......
  • 爬虫案例之 xxx 视频网站
    爬虫案例之视频爬取与合成案例网址:https://v6.dious.cc下载视频的网址:https://www.99meijutt.com/play/97071-0-0.html用到的知识点asynic,协程异步操作。ffmpeg,合成视频指令aiohttp,在协程里面发送异步请求【一】分析(1)分析网站打开网站首页打开开发者模式进......
  • 【爬虫】记一次某视频网站的加密解密
    1、起因  由于女友想看某网站付money视频,咱又不想充money,所以咱去网络上找在线解析的那种网站,下载下来,让其不用卡顿,不用手动复制黏贴,畅快的看视频 2、首先我们抓取电视剧的所有剧集链接https://so.iqiyi.com/so/ 反正输入视频链接搜索就完了,然后拿到页面的url 然后......
  • python3.11 支持TA-lib
    网上找了很多地方才找到的,以下是原网面内容分享给大家:原网址python3.11支持TA-lib-简书(jianshu.com) python3.11支持TA-libasmcos关注IP属地:北京2022.11.0316:42:52字数122阅读1,075做量化的朋友都知道Ta-lib的windows库相当难编译。python3.11性能提升......
  • 在debian上安装python3.10
    先更新系统。sudoaptupdate首先需要安装所需的依赖项,以便能够从源代码构建Python3.10。sudoaptinstallbuild-essentialzlib1g-devlibncurses5-devlibgdbm-devlibnss3-devlibssl-devlibreadline-devlibffi-devlibsqlite3-devwgetlibbz2-dev然后从Python官方......