前端和爬虫基础
一、了解前端页面源代码
1、了解前端页面源代码的构成
html全称HyperText Mackeup Language,翻译为超文本标记语言,它不是一种编程语言,是一种描述性的标记语言,用于描述超文本内容的显示方式,主要由三样东西构成:
- 标签 - 数据(content - 承载了页面的内容)
- 层叠样式表(CSS)- 显示(display - 渲染页面)
- JavaScript(JS) - 行为(behavior - 控制页面交互式行为)
- 命名规范:驼峰式命名(从第二个单词开始首字母大写)
2、页面的大体结构构成
对于初学者来说,要想写一个前端的页面,最先要了解前端页面源代码的大体结构的构成,然后再往里面镶嵌自己想要增加的内容
- 前端页面大体结构主要由 三个标签构成
- html标签:声明部分,主要是用于告诉浏览器这个页面使用的是哪个标注
- head标签:主要是将页面的一些额外信息告诉服务器,不会显示在页面上,但是一般会包含比较重要的元信息,一般我们要对页面中的内容进行格式渲染,就写在head标签里面
- body标签:是页面需要实现的主要内容,我们写的代码就必须放在这个标签里面
3、了解HTML中的相关标签
(1)文本相关
- h1 - h6 : 标题样式,h1 (给文本增加主标题也叫一级标题的语义),以此类推
- p : 段落标签,里面的内容被换行,并且上下的内容之间也有一行空白,P标签是块级标签,里面的内容独占一行
- sub / sup : 下标 /上标
- strong : 加粗
- em : 斜体
(2)图像
- img - 图像,src 要显示图片的路径,路径最好用绝对路径
(3)链接
- a标签 - href属性,是指定要去哪里/name属性(锚点属性)/target属性(_self在当前页面打开新页面,)
- 页面链接
- 锚链接
- 功能链接
(4)表格
- table标签
(5)列表
- ul - 无序列表(unordered list) - li(列表项,列表中的元素)
- ol - 有序列表(ordered list) - li(列表项,列表中的元素)
(6)定义
- dl(标签)
- dt(定义的标题)
- dd(定义的描述)
(7)音视频
- audio(音频) - source
- video(视频)
(8)表单
- form —> input
二、爬虫
1、爬虫的分类
- 通用爬虫:搜索引擎
- 定向爬虫:只爬取自己需要的数据
2、爬虫的作用
-
中小企业一般情况下,数据都是短板,只能靠爬虫去采集数据
-
舆情监控
-
竞品分析、了解行情
3、了解爬虫获取页面所需三方库 - 请求库(requests)
要想通过Python从浏览器中爬取数据,首先要在python中导入一个三方库requests,利用requests的属性来获取网页中的数据信息
(1)了解http协议
-
URI - Universal Resource Identifier - 统一资源标识符
-
URL - Universal Resource Locator - 统一资源定位符
- 域名/IP地址 - 要连接的主机
- 端口号 - 端口用来区分不同的服务
- 资源路径
-
URI = URL + URN(x)
-
协议 - HTTP / HTTPS
- HTTP - Hyper-Text Transfer Protocol - 超文本传输协议,请求响应式协议
- HTML - Hyper-Text Markup Language - 超文本标记语言
- HTTPS - HTTP over SSL —> 安全的HTTP
- 2017年1月1日苹果AppStore强制使用HTTPS
- 微信小程序强制使用HTTPS跟后台程序通信
- Chrome从2017年发布的版本都会对HTTP提示不安全
-
DNS - Domain Name System - 将域名解析为IP地址
-
HTTP请求
- 请求行 - GET / HTTP/1.1
- GET:从服务器获取资源
- POST:向服务器提交数据
- 请求头 - 键值对 - 告诉服务器的额外的信息
- 空行(\r\n)
- 消息体 - 你要发给服务器的数据
- 请求行 - GET / HTTP/1.1
(2)发送请求
-
首先在Python中导入三方库:import requests
-
get请求:可以请求任何网站的URL
-
r = requests.get('https://api.github.com/events')
-
post请求
-
r = requests.post('http://httpbin.org/post', data = { 'key':'value'})
(3)检测响应状态码
- 在向浏览器发送了请求之后我们可以检测一下响应状态码
- r.status_code
- 响应状态码 -------404 Not Found / 403 Forbidde
- 2xx:成功了
- 3xx:重定向
- 4xx:请求有问题
- 5xx:服务器有问题
- 常见的响应状态码有:
(4)获取响应内容
- 文本响应内容:.text
- 二进制响应内容:.content
- JSON响应内容:.json
- 服务器发给浏览器的数据
- 如果请求的是图片,就获得图片的二进制数据
- 如果请求的网页,就获得网页的源代码,浏览器执行代码,用户看到页面
4、爬虫时如何隐匿自己的身份
法不禁止即为许可。爬虫是一个灰色地带,总的来说是不违法的,但是我们在进行爬虫时也要注意隐匿自己的身份,爬虫协议:robots.txt
- 在看网页源代码时,你会发现网页源代码的请求头中有一个‘User-Agent’,他能够使服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
- 因此我们可以在发送请求时定制一个请求头
(1)如何定制请求头
-
只需要传递一个dict给headers参数就可以了,headers参数里面是一个字典,添加’User-Agent’的键,再把网页源代码的User-Agent的值复制粘贴过来就可以了
-
import re import requests resp = requests.get( url='https://movie.douban.com/top250', headers={ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36' } ) # 418 - I am a teapot. print(resp.status_code) print(resp.text)
(2)如何在网页中查看到’User-Agent’
- 第一步:右键点击网页任何一处空白处,再点击检查
- 第二步:点击network,再刷新页面
- 第三步:点击第一个,就可以在Request Headers里面看到’User-Agent’
5、如何解析页面?
要了解我们爬取到的是页面的全部信息,但是我们可能只是需要其中的一部分信息,其他繁杂无用的信息都不需要,因此我们要对我们爬取到的页面信息进行解析,从而获取到自己想要的那一部分
(1)正则表达式解析
- 首先将要查找的内容转化成正则表达式:Pattern = re.compile(‘ …正则表达式…’)
- 然后再利用re模块中的findall去查找r.text中符合Pattern格式的内容
- results = Pattern.findall(r.text)
import re
import requests
resp = requests.get(
url='https://movie.douban.com/top250',
headers