python编程快速上手之第10章实践项目参考答案(11.11.2)



#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os
import re
import urllib
import json
import socket
import urllib.request
import urllib.parse
import urllib.error
# 设置超时
import time

timeout = 5
socket.setdefaulttimeout(timeout)

class Crawler:
    # 睡眠时长
    __time_sleep = 0.1
    __amount = 0
    __start_amount = 0
    __counter = 0

    # 获取图片url内容等
    # t 下载图片时间间隔
    def __init__(self, t=0.1):
        self.time_sleep = t

    # 开始获取
    def __getImages(self, word=‘美女‘):
        search = urllib.parse.quote(word)
        # pn int 图片数
        pn = self.__start_amount
        while pn < self.__amount:

            headers = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0‘}
            url = ‘http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=‘ + search + ‘&cg=girl&pn=‘ + str(
                pn) + ‘&rn=60&itg=0&z=0&fr=&width=&height=&lm=-1&ic=0&s=0&st=-1&gsm=1e0000001e‘
            # 设置header防ban
            try:
                time.sleep(self.time_sleep)
                req = urllib.request.Request(url=url, headers=headers)
                page = urllib.request.urlopen(req)
                data = page.read().decode(‘utf8‘)
            except UnicodeDecodeError as e:
                print(‘-----UnicodeDecodeErrorurl:‘, url)
            except urllib.error.URLError as e:
                print("-----urlErrorurl:", url)
            except socket.timeout as e:
                print("-----socket timout:", url)
            else:
                # 解析json
                json_data = json.loads(data)
                self.__saveImage(json_data, word)
                # 读取下一页
                print("下载下一页")
                pn += 60
            finally:
                page.close()
        print("下载任务结束")
        return

    # 保存图片
    def __saveImage(self, json, word):

        if not os.path.exists("./" + word):
            os.mkdir("./" + word)
        # 判断名字是否重复,获取图片长度
        self.__counter = len(os.listdir(‘./‘ + word)) + 1
        for info in json[‘imgs‘]:
            try:
                if self.__downloadImage(info, word) == False:
                    self.__counter -= 1
            except urllib.error.HTTPError as urllib_err:
                print(urllib_err)
                pass
            except Exception as err:
                time.sleep(1)
                print(err);
                print("产生未知错误,放弃保存")
                continue
            finally:
                print("小黄图+1,已有" + str(self.__counter) + "张小黄图")
                self.__counter += 1
        return

    # 下载图片
    def __downloadImage(self, info, word):
        time.sleep(self.time_sleep)
        fix = self.__getFix(info[‘objURL‘])
        urllib.request.urlretrieve(info[‘objURL‘], ‘./‘ + word + ‘/‘ + str(self.__counter) + str(fix))

    # 获取后缀名
    def __getFix(self, name):
        m = re.search(r‘\.[^\.]*$‘, name)
        if m.group(0) and len(m.group(0)) <= 5:
            return m.group(0)
        else:
            return ‘.jpeg‘

    # 获取前缀
    def __getPrefix(self, name):
        return name[:name.find(‘.‘)]

    # page_number 需要抓取数据页数 总抓取图片数量为 页数x60
    # start_page 起始页数
    def start(self, word, spider_page_num=1, start_page=1):
        self.__start_amount = (start_page - 1) * 60
        self.__amount = spider_page_num * 60 + self.__start_amount
        self.__getImages(word)

crawler = Crawler(0.05)
crawler.start(‘科幻‘, 1, 5)
#crawler.start(‘二次元 性感‘, 3, 3)
# crawler.start(‘帅哥‘, 5)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
userid=input(‘username‘)
passid=input(‘password‘)
sendtxt="hello"#邮件内容
sendto=input(‘sendto‘)
#打开Firefox
driver = webdriver.Firefox()
driver.get(‘http://mail.10086.cn/‘)#邮箱网址
#填写用户名
emailElem = driver.find_element_by_id(‘txtUser‘)
emailElem.send_keys(userid)#用户名
#填写密码
passwordElem = driver.find_element_by_id(‘txtPass‘)
passwordElem.send_keys(passid)#密码
passwordElem.submit()
#写邮件
sleep(10)
write=driver.find_element_by_id(‘btn_compose‘)
write.click()
sleep(10)
iframe_xpath = "//iframe[contains(@id,‘compose_‘)]"
#写信页所在的iframe的xpath路径,通过火狐浏览器的firebug插件可以查看到是在一个iframe的页面内
iframe = driver.find_element_by_xpath(iframe_xpath)
driver.switch_to_frame(iframe)
sleep(5)
driver.find_element_by_id(‘toContaine‘).send_keys(sendto)
driver.find_element_by_id(‘txtSubject‘).send_keys(sendtxt)
driver.find_element_by_id(‘topSend‘).click()
时间: 2024-10-29 19:09:06

python编程快速上手之第10章实践项目参考答案(11.11.2)的相关文章

python编程快速上手之第10章实践项目参考答案

  本章主要讲了python程序的调试,当程序有BUG或异常的时候,我们如何调试代码找出问题点.其实在本章之前的章节我们做练习的时候都会遇到各种各样的错语和异常,最初当不知道程序哪里出错的情况下不可否认的都使用了print语句进行输出并调试代码.没错print也是调试代码的一种工具,直观简单,便也有缺点,就是调试好后要进行删除,也是件麻烦事,于是就有了本章介绍的assert(断言),logging(日志)以及各种调试工具的出现. 首先来回顾一下python的异常. 一.python常见的异常类型

python编程快速上手之第10章实践项目参考答案(11.11.3)

from selenium import webdriver from selenium.webdriver.common.keys import Keys import time browser = webdriver.Firefox() url = 'https://gabrielecirulli.github.io/2048/' browser.get(url) game_ele = browser.find_element_by_class_name('game-container')

python编程快速上手之第10章实践项目参考答案(12.13.1)

#! python3 # multiplicationTable.py import openpyxl,os from openpyxl.styles import Font, NamedStyle os.chdir('C:\\Users\\Administrator\\Python35-32') num=int(input()) wb = openpyxl.Workbook() sheet = wb.get_active_sheet() for n in range(1,num+1): for

python编程快速上手之第8章实践项目参考答案

第8章实践项目之疯狂填词 创建一个一个疯狂填词(Mad Libs),程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE,NOUN,VERB等单词的地方,加上他们自己的文本. 首先准备一个a.txt的文本文件 程序代码如下: #!/usr/bin/env python3.4 # coding:utf-8 # 8.9.2 import re f1 = open('a.txt','r') strf1 = f1.read() print("原文件内容为:") print(s

python编程快速上手之第3章实践项目参考答案

1 #!/usr/bin/env python 2 # coding:utf-8 3 # write by mfyang 4 # collatz.py 5 # 从用户读入一个值,并判断这个值是不是一个int类型的整数,如果不是给出异常提示 6 # 如果这个值是偶数 那么让这个数//2 7 # 如果这个值是奇数 那么让这个数 ×3 + 1 8 # 通过不断调用函数的返回值 并打印这个返回值 直到这个返回值为1 9 10 num = raw_input("please input a number:

python编程快速上手之第5章实践项目参考答案

1 #!/usr/bin/env python3.5 2 # coding:utf-8 3 # 5.6.1 4 # 好玩游戏的物品清单 5 # 给定一个字典,包含物品名称和数量,并打印出数量对应的物品 6 7 dict_stuff = {'rope':1,'torch':6,'gold coin':42,'dagger':1,'arrow':12} 8 print("5.6.1参考答案") 9 print('=' * 80) 10 print("给定字典:",dic

python编程快速上手之第18章实践项目参考答案(18.4.1)

import pyautogui, time print('Press Ctrl-C to quit.') try: while True: time.sleep(10) pyautogui.moveRel(1, 0, duration=0.25) time.sleep(10) pyautogui.moveRel(-1, 0, duration=0.25) except KeyboardInterrupt: print('\nDone.')

python编程快速上手之第15章实践项目参考答案(17.7.2)

#! python3 # Import modules and write comments to describe this program. import zipfile, os from PIL import Image from PIL import ImageFile #os.chdir('D:\\My Documents\\') ImageFile.LOAD_TRUNCATED_IMAGES = True for foldername, subfolders, filenames i

python编程快速上手之第12章实践项目参考答案(12.13.3)

1 #! python3 2 import openpyxl,os,glob 3 os.chdir('C:\\Users\\Administrator\\Python35-32') 4 list=glob.glob('*.txt') 5 print(list) 6 wb = openpyxl.Workbook() 7 sheet = wb.get_active_sheet() 8 columnNum=0 9 for fliename in list: 10 file_object = open(