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.Firefox

Mozilla/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 Chrome

Mozilla/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.iOS

Mozilla/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

 

你可能感兴趣的:(python,Python3网络爬虫)