python爬虫基础一

爬虫简介:
爬虫就是一段自助抓取互联网信息的程序
简单爬虫架构:
python爬虫基础一_第1张图片

我们用一段简单的代码爬取百度网页:
python爬虫基础一_第2张图片

但是上述爬取的结果只能给看得懂代码的程序员看,我们如何得到想要的图形化界面呢?
下面我们试着从网站上爬取一个图片
我们从网站http://placekitten.com上获取一张大小为500*600的图片
python爬虫基础一_第3张图片
爬取结果:
python爬虫基础一_第4张图片

response.geturl()可以获取链接地址
response.info() 返回一个对象,包含网页的头部信息
python爬虫基础一_第5张图片
关于urllib包的用法可以查看官方文档

我们来查看有道翻译的页面信息
python爬虫基础一_第6张图片
Form data中是post提交的主要内容:
python爬虫基础一_第7张图片
服务器用Header中的User-Agent来识别是浏览器访问还是代码访问。如果是python爬虫访问则会被服务器注明,有些服务器可能会屏蔽代码的访问。

那么如何用python实现对表单的提交呢?

import urllib.request
import urllib.parse


url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data['i'] =  '爱国'
data['from'] = 'AUTO'
data['to'] =  'AUTO'
data['smartresult'] = 'dict'
data['client']= 'fanyideskweb'
data['salt'] = '1522810548560'
data['sign']  = '1c3052fed220e88ca910ac44dedd91ea'
data['doctype'] = 'json'
data['version']  = '2.1'
data['keyfrom']  = 'fanyi.web'
data['action']  = 'FY_BY_REALTIME'
data['typoResult']  = 'false'

data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')

print(html)

对于HTTP POST请求方法,数据应该是标准应用程序/ x-www-form-urlencoded格式的缓冲区。 urllib.parse.urlencode()函数接受2元组的映射或序列,并返回此格式的ASCII字符串。它应该被编码为字节,然后用作数据参数。

也就是说我们首先需要将表单数据以二元组序列存储起来,这里我们使用字典,然后使用urllib.parse.urlencode()函数将数据进行格式的转换,最后对数据进行编码。

在这里,简单的说一下decode和encode两个函数的作用:

decode 的作用是将其他编码的字符串转换成 Unicode 编码,
eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码
encode 的作用是将Unicode编码转换成其他编码的字符串,
eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码
Python中使用的编码是Unicode编码。

上述代码运行结果如下:
python爬虫基础一_第8张图片
但是这样的结果也只能给程序员看了,用户可不知道你的运行结果是什么意思,这样的结果其实就是json的结构,我们可以使用json模块的loads方法解析出该字符串,实际上就是反序列化操作。经过反序列或操作之后我们便可以得到一个字典,然后一步步便可以提取出我们要的数据。

import json
import urllib.request
import urllib.parse

content = input('请输入需要翻译的内容:')
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data['i'] =  content
data['from'] = 'AUTO'
data['to'] =  'AUTO'
data['smartresult'] = 'dict'
data['client']= 'fanyideskweb'
data['salt'] = '1522810548560'
data['sign']  = '1c3052fed220e88ca910ac44dedd91ea'
data['doctype'] = 'json'
data['version']  = '2.1'
data['keyfrom']  = 'fanyi.web'
data['action']  = 'FY_BY_REALTIME'
data['typoResult']  = 'false'

data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')

#print(html)
target = json.loads(html)
print('翻译结果 %s' % (target['translateResult'][0][0]['tgt']))

结果如下:
python爬虫基础一_第9张图片

你可能感兴趣的:(python)