Python 简介Python 历史Python 之禅Ipython 解释器ipython magic命令ipython 使用Ipython notebook使用 Anacondaconda 的使用虚拟环境将新的环境添加到jupyter中Anaconda安装拓展警告写入测试文件爬虫入门演示urlliburlretrieveurlencodeGetPostHandlerrequestsGETPOST代理(proxies参数)CookiesSession处理HTTPS请求 SSL证书验证Beautiful Soup简介找标签XPath选取节点谓语(Predicates)选取未知节点选取若干路径lxml库

Python 简介

Python 历史

Python 的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ABC 语言的一种继承。之所以选中 Python 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python's Flying Circus)的爱好者。

1991年,第一个 Python 编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。

Python 2.0 于 2000 年 10 月 16 日发布,增加了实现完整的垃圾回收,并且支持 Unicode

Python 3.0 于 2008 年 12 月 3 日发布,此版不完全兼容之前的 Python 源代码。不过,很多新特性后来也被移植到旧的 Python 2.6/2.7 版本。

Python 之禅

在 Python 解释器下输入

import this

会出来这样一首小诗:

import this

这首诗反映了Python的设计哲学——Python是一种追求优雅,明确,简单的编程语言,但事实上,产生这首诗的代码并没有写的那么简单易懂:

s = """Gur Mra bs Clguba, ol Gvz CrgrefOrnhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""trantab = {}
for c in (ord('A'), ord('a')):for i in range(26):trantab[i + c] = (i + 13) % 26 + cprint(s.translate(trantab))

Life is short. Use Python.

Ipython 解释器

通常我们并不使用Python自带的解释器,而是使用另一个比较方便的解释器——ipython解释器,命令行下输入:

ipython

即可进入ipython解释器。

所有在python解释器下可以运行的代码都可以在ipython解释器下运行:

ipython magic命令

ipython解释器提供了很多以百分号%开头的magic命令,这些命令很像linux系统下的命令行命令(事实上有些是一样的)。

查看所有的magic命令:

%lsmagic

line magic 以一个百分号开头,作用与一行;

cell magic 以两个百分号开头,作用于整个cell。

最后一行Automagic is ON, % prefix IS NOT needed for line magics.说明在此时即使不加上%也可以使用这些命令。

使用 whos 查看当前的变量空间:

%whos

使用 reset 重置当前变量空间:

%reset -f

再查看当前变量空间:

%whos

使用 pwd 查看当前工作文件夹:

%pwd

使用 mkdir 产生新文件夹:

%mkdir demo_test

使用 cd 改变工作文件夹:

%cd demo_test/

使用 writefile 将cell中的内容写入文件:

%%writefile hello_world.py
print("hello world")

使用 ls 查看当前工作文件夹的文件:

%ls

使用 run 命令来运行这个代码:

%run hello_world.py

删除这个文件:

import os
os.remove('hello_world.py')

查看当前文件夹,hello_world.py 已被删除:

%ls

返回上一层文件夹:

%cd ..

使用 rmdir 删除文件夹:

%rmdir demo_test

使用 hist 查看历史命令:

%hist

ipython 使用

使用 ? 查看函数的帮助:

sum?

使用 ?? 查看函数帮助和函数源代码(如果是用python实现的):

# 导入numpy和matplotlib两个包
%pylab
# 查看其中sort函数的帮助
sort??

ipython 支持使用 <tab> 键自动补全命令。

使用 _ 使用上个cell的输出结果:

a = 12
a
_ + 13

可以使用 ! 来执行一些系统命令。

!ping baidu.com

当输入出现错误时,ipython会指出出错的位置和原因:

1 + "hello"

Ipython notebook

在命令行下输入命令:

ipython notebook

会打开一个notebook本地服务器,一般地址是 http://localhost:8888

使用 Anaconda

Anaconda是一个很好用的Python IDE,它集成了很多科学计算需要使用的python第三方工具包。

conda 的使用

根据自己的操作系统安装好Anaconda后,在命令行下输入:

conda list

可以看已经安装好的python第三方工具包,这里我们使用 magic 命令 %%cmd 在 ipython cell 中来执行这个命令:

!conda list

第一次安装好 Anaconda 以后,可以在命令行输入以下命令使 Anaconda 保持最新:

conda update conda
conda update anaconda

conda 是一种很强大的工具,具体用法可以参照它的文档。

也可以参考它的 cheat sheet 来快速查看它的用法。

可以使用它来安装,更新,卸载第三方的 python 工具包:

conda install <some package>
conda update <some package>
conda remove <some package>

在安装或更新时可以指定安装的版本号,例如需要使用 numpy 1.8.1

conda install numpy=1.8.1
conda update numpy=1.8.1

查看 conda 的信息:

conda info
!conda info

虚拟环境

conda 可以用于产生一个自定义的环境,假设在安装的是 Python 2.7 的情况下,想使用 Python 3.4,只需要在命令行下使用 conda 产生一个新的环境:

conda create -n py34 python=3.4

这里这个环境被命名为 py34 ,可以根据喜好将 py34 改成其他的名字。

创建好以后可以在D:\Anaconda3\envs\(具体与安装的anaconda路径为准) 下找到新创建的环境

使用这个环境时,只需要命令行下输入:

activate py34 #(windows)
source activate py34 #(linux, mac)

此时,我们的 Python 版本便是 python 3.4了。

查看当前的环境列表:

!conda env list

退出环境:deactivate

删除环境:conda remove --name test --all

注意:新创建的虚拟环境,添加到jupyter后,一定要安装ipykernel库

conda install ipykernel

否则,将python解释器无法启动

将新的环境添加到jupyter中

在D:\Anaconda3\share\jupyter\kernels 文件夹下,创建1个文件夹(名字随便取,必须英文);

在文件夹下创建kernel.json文件,按照如下格式修改:

{"argv": ["D:\\Anaconda3\\python.exe","-m","ipykernel_launcher","-f","{connection_file}"],"display_name": "Python 3","language": "python"
}

将路径改成新创建的环境路径,display_name代表jupyter中显示的名字。

Anaconda安装拓展

命令行中执行

pip install jupyter_contrib_nbextensions
pip install jupyter_nbextensions_configurator
jupyter contrib nbextension install --user

然后重启jupyter

关于插件的介绍:https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/nbextensions/code_prettify/README_code_prettify.html

例如:Hinterland 代码提示

警告

出现了一些需要让用户知道的问题,但又不想停止程序,这时候我们可以使用警告:

首先导入警告模块:

import warnings

在需要的地方,我们使用 warnings 中的 warn 函数:

warn(msg, WarningType = UserWarning)
def month_warning(m):if not 1<= m <= 12:msg = "month (%d) is not between 1 and 12" % mwarnings.warn(msg, RuntimeWarning)month_warning(13)

有时候我们想要忽略特定类型的警告,可以使用 warnings 的 filterwarnings 函数:

filterwarnings(action, category)

将 action 设置为 'ignore' 便可以忽略特定类型的警告:

warnings.filterwarnings(action = 'ignore', category = RuntimeWarning)month_warning(13)

写入测试文件

%%writefile test.txt
this is a test file.
hello world!
python is good!
today is a good day.
Overwriting test.txt

爬虫入门演示

urllib

urllib提供了一系列用于操作URL的功能。

urlretrieve

urlretrieve方法将url定位到的html文件下载到本地的硬盘中。

如果不指定filename,则会存为临时文件。

urlretrieve()返回一个二元组(filename,mine_hdrs)

from urllib import requestpath, headers = request.urlretrieve("https://www.baidu.com", "tmp.html")
print(path, dict(headers))

urlencode

from urllib import parseurlencode = parse.urlencode({"t": "b", "姓名": "小王", "age": 24})
urlencode

Get

from urllib import request
with request.urlopen('https://suggest.taobao.com/sug?code=utf-8&q=python') as f:data = f.read()print('Status:', f.status, f.reason)for k, v in f.getheaders():print('%s: %s' % (k, v))json_str=data.decode('utf-8')print('Data:', json_str)
import jsondata=json.loads(json_str)['result']
data[:4]

Post

如果要以POST发送一个请求,只需要把参数data以bytes形式传入。

模拟一个微博登录,先读取登录的邮箱和口令,然后按照weibo.cn的登录页的格式以username=xxx&password=xxx的编码传入:

from urllib import request, parse
import jsonlogin_data = parse.urlencode([('key', '22c97468314e1f6d698094382084994c'),('num', '5')
])
req = request.Request('http://api.tianapi.com/cba/index')
# req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
# req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')
with request.urlopen(req, data=login_data.encode('utf-8')) as f:print('Status:', f.status, f.reason)for k, v in f.getheaders():print('%s: %s' % (k, v))json_str = f.read().decode('utf-8')data=json.loads(json_str)['newslist']
df = pd.DataFrame(data)
df

Handler

如果还需要更复杂的控制,比如通过一个Proxy去访问网站,我们需要利用ProxyHandler来处理,示例代码如下:

import urllibproxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
with opener.open('http://www.example.com/login.html') as f:pass

requests

虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用:)

Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

requests 的底层实现其实就是 urllib3
Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6—3.7,而且能在PyPy下完美运行。

开源地址:https://github.com/kennethreitz/requests

中文文档 API:http://docs.python-requests.org/zh_CN/latest/index.html

GET

可以传入一个dict作为params参数,传入一个dict作为headers参数:

import requestsr = requests.get('https://www.douban.com/search',params={'q': 'python','cat': '1001'},headers={'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
print(r.url)
# requests自动检测编码,可以使用encoding属性查看:
print(r.encoding)
# 用content属性获得bytes二进制内容:
print(r.content)
# 查看响应码
print(r.status_code)
# 对于特定类型的响应,例如JSON,可以直接获取:r = requests.get("https://www.tianqiapi.com/api/?version=v1&city=深圳&appid=13639281&appsecret=yCJK9RVk")
r.json()

POST

要发送POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据:

r = requests.post('http://api.tianapi.com/cba/index',data={'key': 'xxxxx','num': '5'})
r.json()

requests默认使用application/x-www-form-urlencoded对POST数据编码。如果要传递JSON数据,可以直接传入json参数:

params = {'key': 'value'}
r = requests.post(url, json=params) # 内部自动序列化为JSON

类似的,上传文件需要更复杂的编码格式,但是requests把它简化成files参数:

upload_files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)

在读取文件时,注意务必使用'rb'即二进制模式读取,这样获取的bytes长度才是文件的长度。

把post()方法替换为put(),delete()等,就可以以PUT或DELETE方式请求资源。

除了能轻松获取响应内容外,requests对获取HTTP响应的其他信息也非常简单。例如,获取响应头:

r.headers
r.headers['Content-Type']# 获取指定的Cookie:
r.cookies['ts']# 传入cookies参数:
cs = {'token': '12345', 'status': 'working'}
r = requests.get(url, cookies=cs)# 指定timeout超时参数:
r = requests.get(url, timeout=2.5) # 2.5秒后超时

代理(proxies参数)

如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求:

import requests# 根据协议类型,选择不同的代理
proxies = {"http": "http://12.34.56.79:9527","https": "http://12.34.56.79:9527",
}response = requests.get("http://www.baidu.com", proxies=proxies)
print(response.text)

私密代理验证(特定格式) 和 Web客户端验证(auth 参数)

import requests# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" }response = requests.get("http://www.baidu.com", proxies = proxy)print(response.text)

如果是Web客户端验证,需要添加 auth = (账户名, 密码)

import requestsauth = ('test', '123456')response = requests.get('http://192.168.199.107', auth=auth)print(response.text)

Cookies

如果一个响应中包含了cookie,那么我们可以利用 cookies参数拿到:

import requestsresponse = requests.get("http://www.baidu.com/")# 返回CookieJar对象:
cookiejar = response.cookies# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)print(cookiejar, type(cookiejar))print(cookiedict)

Session

在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。

会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。

import requests# 1. 创建session对象,可以保存Cookie值
ssion = requests.session()# 2. 处理 headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}# 3. 需要登录的用户名和密码
data = {"email":"xxx@qq.com", "password":"xxx"}  # 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("http://www.renren.com/PLogin.do", data = data)# 5. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("http://www.renren.com/437368853/profile")# 6. 打印响应内容
print(response.text)

处理HTTPS请求 SSL证书验证

Requests也可以为HTTPS请求验证SSL证书:

要想检查某个主机的SSL证书,可以使用 verify 参数(也可以不写)

import requests
response = requests.get("https://www.baidu.com/", verify=True)# 也可以省略不写
# response = requests.get("https://www.baidu.com/")
t = response.content
print(t.decode("utf-8"))

如果SSL证书验证不通过,或者不信任服务器的安全证书,则会报出SSLError。
如果我们想跳过 12306 的证书验证,把 verify 设置为 False 就可以正常请求了。

r = requests.get("https://www.12306.cn/mormhweb/", verify = False)

Beautiful Soup

简介

简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

from bs4 import BeautifulSouphtml = """<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html)
print(soup.prettify())

找标签

print(soup.title)
# <title>The Dormouse's story</title>
print(soup.head)
# <head><title>The Dormouse's story</title></head>
print(soup.a)
# <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
print(soup.p)
# <p class="title" name="dromouse"><b>The Dormouse's story</b></p>

对于标签,它有两个重要的属性,是 name 和 attrs:

print(soup.name)
# [document]
print(soup.head.name)
# head

soup 对象本身比较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称

print(soup.p.attrs)

在这里,我们把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。

如果想要单独获取某个属性:

print(soup.p['class'])
# ['title']

获取文本:

print(soup.p.string)
# The Dormouse's story

支持css选择器,方法是调用select选择器:

print(soup.select('a[href="http://example.com/elsie"]'))

XPath

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。

W3School官方文档:http://www.w3school.com.cn/xpath/index.asp

XPath 开发工具

  1. 开源的XPath表达式编辑工具:XMLQuire(XML格式文件可用)

  2. Chrome插件 XPath Helper

  3. Firefox插件 XPath Checker

选取节点

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

下面列出了最常用的路径表达式:

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

表达式 路径表达式
bookstore 选取 bookstore 元素的所有子节点。
/bookstore 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

lxml库

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

lxml python 官方文档:http://lxml.de/index.html

需要安装C语言库,可使用 pip 安装:pip install lxml (或通过wheel方式安装)

from lxml import etree text = '''
<div><ul><li class="item-0"><a href="link1.html">first item</a></li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-inactive"><a href="link3.html">third item</a></li><li class="item-1"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li> 闭合标签</ul></div>
'''#利用etree.HTML,将字符串解析为HTML文档
html = etree.HTML(text) # 按字符串序列化HTML文档
result = etree.tostring(html) print(result.decode("utf-8"))

lxml还支持从文件里读取内容:

from lxml import etree# 读取外部文件 hello.html
html = etree.parse('./hello.html')
result = etree.tostring(html, pretty_print=True)print(result)

XPath实例测试:

# 获取<li> 标签的所有 class属性
html.xpath('//li/@class')
# 获取<li>标签下hre 为 link1.html 的 <a> 标签
html.xpath('//li/a[@href="link1.html"]/text()')
## 获取<li> 标签下的所有 <span> 标签
html.xpath('//li//span')
# 获取 <li> 标签下的<a>标签里的所有 class
html.xpath('//li/a//@class')
# 获取最后一个 <li> 的 <a> 的 href
html.xpath('//li[last()]/a/@href')
# 获取倒数第二个元素的内容
result = html.xpath('//li[last()-1]/a')
# text 方法可以获取元素内容
print(result[0].text)
# 获取 class 值为 bold 的标签名
html.xpath('//*[@class="bold"]')# tag方法可以获取标签名
print(result[0].tag)

python与爬虫入门演示相关推荐

  1. python爬虫挖掘平台搭建_一篇非常棒的安装Python及爬虫入门博文!

    原标题:一篇非常棒的安装Python及爬虫入门博文! 一. 大数据及数据挖掘基础(私信小编007即可获取大量Python学习资料!) 第一部分主要简单介绍三个问题: 1.什么是大数据? 2.什么是数据 ...

  2. Python网络爬虫入门

    Python网络爬虫入门 网络爬虫(web crawler),也叫网络蜘蛛(Web Spider).网络机器人(Internet Bot).简单地说,抓取万维网(World Wide Web)上所需要 ...

  3. 【python】爬虫入门相关

    ​目录 一. 爬虫的流程 二.爬虫相关技术介绍 1. HTML和CSS 1> HTML 2> URL网址解释 3> HTTP与HTTPS 协议 4> Chrome浏览器分析网站 ...

  4. python软件安装步骤-一篇非常棒的安装Python及爬虫入门博文!

    一. 大数据及数据挖掘基础(私信小编007即可获取大量Python学习资料!) ***部分主要简单介绍三个问题: 1.什么是大数据? 2.什么是数据挖掘? 3.大数据和数据挖掘的区别? 1.大数据(B ...

  5. Python网络爬虫入门(一)入门

    Python网络爬虫(一)入门 使用到的库:requestspip+BeautifulSoup4pip+tqdmpip+html5lib python版本:3.8 编译环境:Jupyter Noteb ...

  6. Python 网络爬虫入门详解

    什么是网络爬虫 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 优先申明:我们使用 ...

  7. 01-为什么要学爬虫-python小白爬虫入门教程

    学习目的以及需求 需求来自于:抓取的某个网站或者某个应用的内容,提取有用的价值 实现手段 模拟用户在浏览器或者应用(app)上的操作,实现自动化的程序 爬虫应用场景(利用爬虫能做什么?) 大家最熟悉的 ...

  8. Python之爬虫入门(最详细通俗易懂讲解)

    爬虫入门及小案列,我们将学会如何爬取网站图片,视频 首先,我们需要导入request的包 然后定义我们要访问的地址,模拟浏览器发送请求,获取返回内容, 最后,再通过**urllib.request.u ...

  9. Python学习-爬虫入门知识点整理

    1 通讯协议 1.1 端口 进行数据通讯的步骤: (1)找到对方IP (2)数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行了标识,这个数字就叫端口,这里的端 ...

最新文章

  1. 前端基础知识 - 收藏集 - 掘金
  2. Delphi 两个应用程序(进程)之间的通信
  3. 一文掌握 Redis 常用知识点 | 图文结合
  4. 使用diskpart命令为windows7创建分区
  5. Linux下java/bin目录下的命令集合
  6. SpringMVC中的设计模式
  7. linux平台下C语言按进程名查找进程号pid
  8. 一步一步教您用websocket+nodeJS搭建简易聊天室(4)
  9. javaWeb项目中web.xml的xsd( XML Schemas Definition)文件
  10. Vc数据库编程基础1
  11. 字典树Trie练习 HihoCoder 1014
  12. Unity 获取视频缩略图
  13. 关于在ElasticSearch中使用now函数进行时间范围过滤查询的问题
  14. sessionStorage和localStorage
  15. Kali报错SIOCSIFFLAGS:不允许的操作 解决办法
  16. form 表单验证验证方法-validate-methods.js
  17. 远程计算机或设备将不接受连接 解决方案
  18. 欧科云链链上卫士:做穿越Web3黑暗森林的那盏探照灯
  19. 发布会签到系统_系统开发_创建项目及应用
  20. Python 优雅地利用两点经纬度计算地理空间距离

热门文章

  1. 手推梯度提升树GBDT
  2. git 推送报[rejected] dev -> dev (non-fast-forward)
  3. Cricuit Switched Fallback (CSFB) : UTRAN Overview
  4. golang win10 命令行 go get 安装包到src目录
  5. .net是什么域名后缀?
  6. 大话设计模式学习笔记 -- 装饰模式
  7. 网页加载ico图标方法
  8. I2C总线协议和控制器解析
  9. 遗传算法(GA)计算二元函数极值(C语言实现、matlab工具箱实现)
  10. tengine php mysql_安装Tengine php mysql