python自学笔记(8)--Python简单爬虫从网站上下载图片和用第三方库request实现百度翻译

python自学笔记(8)--Python简单爬虫从网站上下载图片和用第三方库request实现百度翻译


直接贴代码,具体参见注释,主要用到了urllib这个包,需要说明的是urllib2模块只在python2中存在,到了python3之后就被改到urllib.request中去了,所以python3是没有urllib2这个模块的。


import urllib.request
import urllib.response
import re

testUrl = "http://www.tooopen.com/view/779441.html"
testReg = r'src="(http://.*?\.jpe?g)" alt'


def get_html(url):
    response = urllib.request.urlopen(url)  # urlopen返回一个类文件对象,可以像文件一样操作
    '''
    print("info: ")
    print(response.info())#返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
    print("code: ")
    print(response.getcode())#返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
    #一般在访问网站前判断网站是否可访问,4xx的错误一般是请求存在问题,一般是不可恢复的,5xx的问题一般是服务端存在问题,可以尝试重新下载
    print("url: ")
    print(response.geturl())#返回请求的url
    '''
    html = response.read()  # read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
    # html用decode("utf-8")进行解码,由bytes变成string。
    # py3的urlopen返回的不是string是bytes。
    return html#返回的是string


def getImage(reg, html):
    imgre = re.compile(reg)#re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创
    # 建模式对象。可以实现更有效率的匹配。在直接使用字符串表示的正则表达式进行search,match和findall操作时,
    # python会将字符串转换为正则表达式对象。而使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换。
    #imageList = re.findall(reg, html)# 此方式没有对reg进行编译,所以应该会多次对reg转换,导致效率降低
    imageList = imgre.findall(html)#以列表的形式返回能匹配的子串
    print(imageList)
    count = 1
    for image in imageList:
        resp = urllib.request.urlopen(image)
        respHtml = resp.read()

        with open(str(count) + '.jpg', 'wb') as f:
            f.write(respHtml)
            print("save: " + str(count) + '.jpg')
        count += 1;

def test():
    getImage(testReg, get_html(testUrl).decode("utf-8"))

if __name__ == "__main__":
    test()



利用第三方库request实现百度翻译

第三方库的导入方法参考http://blog.csdn.net/qiannianguji01/article/details/50397046
实现方法转载自https://www.cnblogs.com/yezhaodan/p/7452885.html,做了一点小修改。

import requests

def translate():
    url = 'http://fanyi.baidu.com/v2transapi/'
    print('----------感谢百度翻译,禁止用于商业用途----------')
    while True:
        content = input("Please confirm Chinese to (E)nglish,English to (C)hinese,or (Q)uit:\n")
        if content in ['Q','q','quit','Quit']:
            break;
        elif content in ['C']:
            content = input("请输入翻译内容\n")
            data = {
                'from': 'en', 'to': 'zh', 'query': content,
                'transtype': 'translang',
                'simple_means_flag': '3',
            }
        elif content in ['E']:
            content = input("请输入翻译内容\n")
            data = {
                'from': 'zh', 'to': 'en', 'query': content,
                'transtype': 'translang',
                'simple_means_flag': '3',
            }
        else:
            print("格式错误,请重新选择")
            continue
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
                          + '35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0'}
        response = requests.post(url, data, headers = headers)#post请求数据
        # head = response.headers

        # text = response.text
        # text = json.loads(text)
        # res = text['trans_result']['data'][0]['dst']
        # print(res)
        # print(head['Content-Type'])
        print(response.json()['trans_result']['data'][0]['dst'])#requests中已经有了内置的函数,r.json(),无需引入json模块


if __name__ == "__main__":
    translate()


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值