• 寒假大数据学习笔记三


      今天进入Python爬虫学习,具体学习内容为下载图片,爬取有道词典的翻译和简单的使用代理。

      1、下载图片

      非常简单的小脚本,在http://www.placekitten.com网上爬取猫咪的图片

      代码如下

      

     1 from urllib import request
     2 
     3 
     4 def door():
     5     url = "http://www.placekitten.com"
     6     req = request.Request(url)
     7     response = request.urlopen(req)
     8     kitten = response.read()
     9     with open("cat.jpg", "wb") as p:
    10         p.write(kitten)
    11 
    12 
    13 def main():
    14     door()
    15 
    16 
    17 if __name__ == '__main__':
    18     main()

      2、爬取有道词典的翻译

      打开开发者工具,选择network,然后输入要翻译的内容,点击翻译,network中就会出现如下内容

      

      我这里不知道为什么,点击翻译后总是出现“抱歉,请不要频繁请求服务”,同时也翻译不出东西。不过不大影响接下来的工作。点击Name下第一个“translate_o……”出现如下画面(需要注意的是,只有有道翻译是第一个,百度翻译不是,所以需要在一大堆请求中找到需要的)

      

      得到相应的Request URL参数(千万记得去掉_o,不然是会被反爬的!!!),一直下拉找到Form Data

      将Form Data制作成字典来请求反馈

      

    data = {
            'i': ‘人生得意须尽欢’,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': '15805516827176',
            'sign': '17cf93ee9a11894806209a83c480ca2b',
            'ts': '1580551682717',
            'bv': '334720d41a1d174718af3a3d58d56f23',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_CLICKBUTTION'}

      如此,得到字典

      在得到Request URL和Data字典后,就可以进行爬取了,代码如下

      

    from urllib import request
    from urllib import parse
    import json
    import time
    
    
    def translation(string):
        url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
            'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
        data = {
            'i': string,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': '15805516827176',
            'sign': '17cf93ee9a11894806209a83c480ca2b',
            'ts': '1580551682717',
            'bv': '334720d41a1d174718af3a3d58d56f23',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_CLICKBUTTION'}
        data = parse.urlencode(data).encode("utf-8")
        req = request.Request(url, data, headers)
        response = request.urlopen(req)
        html = response.read().decode("utf-8")
        prasewords(html)
    
    
    def prasewords(html):
        trans = json.loads(html)
        firstwords = trans['translateResult'][0][0]['src']
        finaltrans = trans['translateResult'][0][0]['tgt']
        output(firstwords, finaltrans)
    
    
    def output(firstwords, finaltrans):
        print("您输入的是:%s" % firstwords)
        print("翻译结果是:%s" % finaltrans)
    
    
    def main():
        while True:
            print("")
            string = input("请输入要翻译的内容(输入quit或q或exit均可退出程序):")
            if string == 'quit' or string == 'q' or string == 'exit':
                break
    
            translation(string)
            time.sleep(3)
    
    
    if __name__ == '__main__':
        main()

      需要注意的是,有时需要加入headers,请求头中写入User-Agent(用户代理,在浏览器的地址栏输入    about://version),否则默认User-Agent是Python自己的,访问会被拒绝。

      3、简单的使用代理

      这一步需要到网络上取搜索能用的免费ip代理地址(https://www.xicidaili.com/,当然,如果花钱买更好,

      既稳定又快速),我尝试了不下50个,才勉强找到一个可用的。

      首先找到一个可以查看自己IP地址的网页,抓取网页源代码,检查是否正常显示自己的IP地址。可以正常显示,进入下一步。不可以正常爬去网页源代码,更换网址或者加入请求头等操作直到可以正常显示。其次利用代码代理IP,再次抓取源码,检查IP是否被更换。代码如下

      

     1 import urllib.request
     2 
     3 
     4 def proxyip():
     5     # 可以正常显示我的IP地址的网站
     6     url = "http://www.ccw.cc/ip/"
     7     # 使用代理IP的操作
     8     proxy_support = urllib.request.ProxyHandler(
     9         {'http': '58.212.43.145:9999'})
    10     opener = urllib.request.build_opener(proxy_support)
    11     urllib.request.install_opener(opener)
    12     # 更换IP后抓取源码
    13     req = urllib.request.Request(url)
    14     response = urllib.request.urlopen(req)
    15     # 读取并打印源码
    16     html = response.read().decode("utf-8")
    17     print(html)
    18 
    19 
    20 if __name__ == '__main__':
    21     proxyip()

      可以看到,IP地址已经被更换

      

    PS.

      强烈推荐autopep8这个插件,用pycharm写代码没有autopep8简直就是地狱!代码会无时无刻不报PEP8警告,虽然不是错误,但密密麻麻的波浪线简直是要逼死强迫症!autopep8可以解决大多数格式问题。

      简单叙述一下安装教程

      1、直接用pycharm安装,全图形化操作

        打开File—>Setting—>Project:xxx—>Project Interpreter

        

        点击+号,输入autopep8,耐心等待

        直到出现

        点击Install Package,一路等待安装成功。

      2、使用pip安装

        打开终端,输入(sudo)pip install autopep8,同样耐心等待安装成功

      

      3、配置autopep8

        打开setting—>tools—>External Tools,点击加号,出现如下配置界面

        

        Name输入配置名称(随便输)。重点是Tools Settings的三个配置,Program输入autopep8所在位置,Arguments输入--in-place --aggressive --aggressive $FilePath$,Work directory输入$ProjectFileDir$,最后点击ok,配置成功!

       4、使用方法

        在代码界面右击,找到External Tools,点击相应的配置名称,代码就不会报烦人的PEP8警告啦!

        

      

        

  • 相关阅读:
    Unity3D ShaderLab 立方体图的反射遮罩
    Unity3D ShaderLab 简单的立方体图反射
    Unity3D ShaderLab 各向异性高光
    Unity3D ShaderLab 使用贴图对模型的高光进行遮罩
    Unity3D ShaderLab 使用BlinnPhong高光类型
    Unity3D ShaderLab 创建自定义高光类型
    Unity3D ShaderLab 基础的高光实现
    Unity3D ShaderLab法线贴图
    Unity3D ShaderLab压缩混合纹理贴图
    Java几种建立实例的方法
  • 原文地址:https://www.cnblogs.com/YXSZ/p/12250277.html
Copyright © 2020-2023  润新知