您的位置:首页 > 编程语言 > Python开发

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

2017-12-04 17:50 1116 查看
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 = 1for 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("格式错误,请重新选择")continueheaders = {'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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: