**爬虫学习计划**前言一、爬虫是什么?第一章、爬虫入门
1.2、web请求剖析
1.3、http协议1.4、requests 入门11.5、requests入门21.6、requests 入门3 第二章、数据解析与提取
2.1数据解析概述2.2 正则表达式2.3 re模块 第三章、数据解析与提取第四章、第四章给爬虫提速-异步爬虫第五章、第五章动态网页数据爬取第六章_爬虫框架总结
前言
提示:这里可以添加本文要记录的大概内容:
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、爬虫是什么?
爬虫:通过编写程序来获取到互联网上的资源百度
爬虫:通过编写程序来获取到互联网上的资源百度
需求:用程序模拟浏览器。输入一个网址.从该网址中获取到资源或者内容#python搞定以上需求。特别简单
需求:用程序模拟浏览器.输入一个网址.从该网址中获取到资源或者内容python搞定以上需求.特别简单
1.1 手刃一个小爬虫
第一个小爬虫案例:爬取一个网址主页内容
from urllib.request import urlopen
url = 'http://www.baidu.com'
resp = urlopen(url)
with open("baidu.html", mode="w", encoding="utf-8") as f:
f.write(resp.read().decode("utf-8"))
print("over")
1.2、web请求剖析
#1.服务器渲染:在服务器那边直接把数据和html整合在一起.统一返回给浏览器#在页面源代码中能看到数据
#1。服务器渲染:在服务器那边直接把数据和html整合在一起.统一返回给浏览器#在页面源代码中能看到数据
#2.客户端渲染:
#2。客户端渲染:
#第一次请求只要一个html骨架。第二次请求拿到数据。进行数据展示.
#第一次请求只要一个html骨架.第二次请求拿到数据.进行数据展示.
#在页面源代码中,看不到数据
#在页面源代码中,看不到数据
#熟练使用浏览器抓包工具
#熟练使用浏览器抓包工具
HTTP协议
协议:就是两个计算机之间为了能够流畅的进行沟通而设置的一个君子协定.常见的协议有TCP/IP. SOAP协议, HTTP协议,SMTP协议等等….…
片TTP协议, Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议.直白点儿,就是浏览器和服务器之间的数据交互遵守的就是HTTP协议.
HTTP协议把一条消息分为三大块内容.无论是请求还是响应都是三块内容
请求
1请求行->请求方式请求url地址协议 2请求头-> 放一些服务器要使用的附加信息 3请求体->一般放一些请求参数
响应
1状态行->协议状态码 2响应头->放一些客户端要使用的一些附加信 3响应体->服务器返回的真正客户端要用的内容CHTML, json)等 请求头中最常见的一些重要内容(爬虫需要): 1. User-Agent:请求载体的身份标识(用啥发送的请求) 2. Referer:防盗链(这次请求是从哪个页面来的?反爬会用到) 3. cookie:本地字符串数据信息(用户登录信息,反爬的token) 夏 响应头中一些重要的内容:| 1.cookie:本地字符串数据信息(用户登录信息,反爬的token) 2.各种神奇的莫名其妙的字符串(这个需要经验了,一般都是token字样,防止各种攻击和反爬) 请求方式: GET: 显示提交 POST:隐示提交1.4、requests 入门1
#安装requests
pip install requests
国内源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
import requests
wd=input("请输入你要搜索的关键词")
url = f"https://www.baidu.com/s?ie=UTF-8&wd={wd}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}
#伪装
resp = requests.get(url, headers=headers) # 伪装解决小反爬
print(resp.text) # 拿到网页源代码
1.5、requests入门2
请求百度翻译翻译单词
import requests
url= "https://fanyi.baidu.com/sug"
word= input("请输入要查询的单词:")
data= {
"kw": word
}
# 发送post请求,发送的数据必须放在字典中,通过data参数进行传递
resp = requests.post(url, data=data)
print(resp.json()) #将服务器返回的内容直接处理成json() => dictl
1.6、requests 入门3
爬取豆瓣
import requests
url= "https://movie.douban.com/typerank?"
param = {
"type_name": "剧情",
"type": 11,
"interval_id":"100:90",
"action": "",
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}
resp = requests.get(url, param=param, headers=headers)
print(resp.json())
明天继续 一天不学习浑身难受
第二章、数据解析与提取 2.1数据解析概述在上一章中,我们基本上掌握了抓取整个网页的基本技能.但是呢,大多数情况下,我们并不需要整个网页的内容,只是需要那么一小部分.怎么办呢?这就涉及到了数据提取的问题.
本课程中,提供三种解析方式:
- re解析bs4解析xpath解析
这三种方式可以混合进行使用,完全以结果做导向,只要能拿到你想要的数据.用什么方案并不重要.当你掌握了这些之后.再考虑性能的问题.
Regular expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则.
我们抓取到的网页源代码本质上就是一个超长的字符串,想从里面提取内容.用正则再合适不过了.
心
正则的优点:速度快,效率高,准确性高正则的缺点:新手上手难度有点儿高.
不过只要掌握了正则编写的逻辑关系,写出一个提取页面内容的正则其实并不复杂
正则的语法:使用元字符进行排列组合用来匹配字符串在线测试正则表达式https:/tool.oschina.net/regexl
元字符:具有固定含义的特殊符号
常用元字符:
import re
# findll:匹配字符串中所有符合正则表达的内容
list = re.findall(r"d+", "我的电话号码是:123456,他的电话号码是:100123")
print(list)
# finditer: 匹配字符串中所有的内容返回的是迭代器,从迭代器中拿到内容需要 .group()
it = re.findall(r"d+", "我的电话号码是:123456,他的电话号码是:100123")
for i in it:
print(i)
# search 找到一个结果就返回, 返回的是match对象,拿到数据需要 .group()
s = re.search(r"d+", "我的电话号码是:123456,他的电话号码是:100123")
print(s.group())
# match 是冲头匹配
m = re.match(r"d+", "123456,他的电话号码是:100123")
print(m.group())
# 预加载正则表达式
obj = re.compile(r"d+")
ret = obj.findall("我的电话号码是:123456,他的电话号码是:100123")
for j in ret:
print(j)
data = """
寒依网络
寒依科技
寒依很帅
寒依真帅
寒依爱学习
"""
# (正则表达式) 可以单独从正则匹配的内容中进一步提取内容
obk = re.compile(r"(?P.*?) ", re.S) #re.S ;让.能匹配到换行符
result = obk.finditer(data)
for l in result:
print(l.group("h"))
第三章、数据解析与提取
第四章、第四章给爬虫提速-异步爬虫
第五章、第五章动态网页数据爬取
第六章_爬虫框架
总结


