此为教程笔记
教程地址:https://study.163.com/course/courseMain.htm?courseId=1209401897
感谢老师:城市数据团大鹏
目录
1 读懂网页结构(HTML)
HTML更多信息访问菜鸟教程
1.1 什么是HTML?
HTML 是用来描述网页的一种语言。
- HTML 指的是超文本标记语言: HyperText Markup Language
- HTML 不是一种编程语言,而是一种标记语言
- 标记语言是一套标记标签 (markup tag)
- HTML 使用标记标签来描述网页
- HTML 文档包含了HTML 标签及文本内容
- HTML文档也叫做 web 页面
1.2 HTML的标签、元素、属性
HTML 标记标签通常被称为 HTML 标签 (HTML tag)。
- HTML 标签是由尖括号包围的关键词,比如 <html>
- HTML 标签通常是成对出现的,比如 <b>(开始标签 )和 </b>(结束标签)
- 开始和结束标签也被称为开放标签和闭合标签
格式为:<标签>内容</标签>
常见的标签:
<html> </ html>创建一个HTML文档
<head> </ head>设置文档标题和其他在网页中不显示的信息
<title> </ title>设置文档的标题 , 包括<h1> - <h6> ,分别表示最大标题和最小标题
<p> </p>段落标签
<img> 是空标签,意思是说,它只包含属性Src,并且没有闭合标签。
<a> </a>超链接标签
列表标签:有序列表<ol>、无序列表<ul>,列表项<li>
<body> </body>主体内容标签,一般网页内容均放入此标签组之间。爬虫主要爬body标签。
<div>块标签,<span>文本容器,也是块标签
<script>定义客户端脚本
网页的总标签为<html>,<html>由<head>和<body>构成。为树结构。
标签大全网址:http://www.divcss5.com/html/h356.shtml
HTML的元素
- HTML 元素以开始标签起始
- HTML 元素以结束标签终止
- 元素的内容是开始标签与结束标签之间的内容
- 某些 HTML 元素具有空内容(empty content)
- 空元素在开始标签中进行关闭(以开始标签的结束而结束)
- 大多数 HTML 元素可拥有属性
HTML 属性
- HTML 元素可以设置属性
- 属性可以在元素中添加附加信息
- 属性一般描述于开始标签
- 属性总是以名称/值对的形式出现,比如:name="value"。
常见属性如:
HTML 链接由 <a> 标签定义。链接的地址在 href 属性中指定:
实例,超链接的属性名为href
<a href="http://www.runoob.com">这是一个链接</a>
2 页面解析及标签提取
2.1 如何用Python访问网址
使用包:requests
用requests访问一个网站实例
import requests
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url = 'https://movie.douban.com/cinema/nowplaying/beijing/'
r = requests.get(url, headers=header) # 需要添加上述头文件才可以成功连上
print(r)
结果为 <Response [200]> 就表示正确访问,一些结果的错误代码如下:
如没有使用header,结果就为: <Response [418]>
print(r.text) 获取网页内容
2.2 使用BeatufulSoup解析网页
# 解析网页
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text, 'lxml')
print(soup)
结果与print(r.text)结果一致
2.3 获取标签的三种方法
# 找某个标签
print(soup.h1) # 只能找到一个h1标签
print(soup.find('h1')) # 只能找到一个h1标签
print(soup.find_all('h1')) # 找到所有h1标签,并返回列表
结果:
<h1>北京 - 在线购票&影讯</h1>
<h1>北京 - 在线购票&影讯</h1>
[<h1>北京 - 在线购票&影讯</h1>, <h1 class="page-title">电影票 - 北京</h1>]
3 实现第一个数据爬虫
采集去哪儿网的景点数据,包含200多页,数据量大执行慢的可以少访问一些。
# 实操 获取去哪儿网的景点信息
# https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-1 是第一页的景点,总共提取200页,
# 网址的区别是后面的-1-x
# 获取网页地址
url_list = []
ur = 'https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-'
for i in range(1, 11):
url_list.append(ur + str(i))
# print(len(url_list))
# 循环遍历网页,提取景点信息
datai = [] # 存放所有景点信息
n = 0
for uri in url_list: # 获取一个页面
r = requests.get(uri) # 请求网页
soup = BeautifulSoup(r.text, 'lxml') # 解析网页
# 获取每页景点的标签ul,通过属性去找到特定的标签,注意查看属性是否唯一
ul = soup.find('ul',class_="list_item clrfix")
# 获取每页中单个景点的信息,单景点在li标签中,一页有10个li,遍历获取
li = ul.find_all('li')
for l in li:
dic = {} # 存放单个景点信息
dic['景点名称'] = l.find('span', class_="cn_tit").text # 提取元素(内容)
dic['攻略数'] = l.find('div', class_="strategy_sum").text
dic['评论数'] = l.find('div', class_='comment_sum').text
dic['星级数'] = l.find('span', class_='cur_star').attrs['style'] # 提取属性
n += 1
print('成功采集%i条数据' % n)
datai.append(dic)
print(datai)
结果
4 数据分析师应该学爬虫的什么
此课程已经不可看了,也找不到好的类似课程,所以不学了。