寒假大数据学习笔记三

  今天进入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警告啦!

    

  

    

原文地址:https://www.cnblogs.com/YXSZ/p/12250277.html