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

来源:互联网 发布:英雄在美国的票房数据 编辑:程序博客网 时间:2024/05/22 17:16

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


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


import urllib.requestimport urllib.responseimport retestUrl = "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#返回的是stringdef 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 requestsdef 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()


阅读全文
0 0
原创粉丝点击