文章目录
- 0.前言
- 1. HTTP/HTTPS
- 1.1 URL组成
- 1.2 HTTP请求
- 1.3 HTTP响应
- 1.4 常见状态码
- 2.HTML/CSS/JavaScript知识点补充
- [Python3 - 补充知识点之HTML 、JavaScript、CSS]()
- 3.Python程序联网获取数据
- 练习: 1.抓取图片
- 练习: 2.抓取某电影榜top250
0.前言
爬虫违法吗? ----> 法不禁止即为许可, 灰色地带, 写爬虫程序一定要注意隐匿身份
~ 爬虫协议: robots.txt
爬虫的分类?
~ 通用爬虫: 搜索引擎
~ 定向爬虫: 只爬取自己需要的数据
爬虫的作用?
~ 中小企业一般情况下, 数据都是短板, 只能爬虫去采集数据
~ 舆情监控
~ 竞品分析、了解行情
写爬虫程序
1.获取页面: requests.get(url) ---> resp.txt
2.解析页面:
~ 正则表达式解析: re.complite('...') ---> Pattern ---> findall / match /search
~ CSS选择器解析: BeautifulSoup4
~ XPath解析
1. HTTP/HTTPS
URI - Universal Resource Identifier - 统一资源标识符
URL - Universal Resource Locator - 统一资源定位符
URI = URL + URN(x)
https://www.baidu.com:443/index.html
http://110.242.68.3:80/index.html
https://tiebapic.baidu.com/forum/pic/item/09fa513d269759ee4cf1fe8fa5fb43166c22dfd5.jpg
1.1 URL组成
协议 - HTTP / HTTPS , HTTP默认80端口, HTPPS默认443端口
~ HTTP - Hyper-Text Transfer Protocol
---> HTML - Hyper-Text Markup Language
~ HTTPS - HTTP over SSL ---> 安全的HTTP
- 2017年1月1日: App Store 强制使用HTTPS
- 微信小程序强制使用https
- Chrome从2017年发布的版本都会对HTTP提示不安全
域名/IP地址 - 要连接的主机
端口号 - 端口用来区分不同的服务
DNS - Domain Name System - 将域名解析为IP地址
HTTP协议 - 请求响应式的协议
1.2 HTTP请求
HTTP请求
~ 请求行 - GET / HTTP/1.1
- GET: 从服务器获取资源
- POST: 向服务器提交数据
~ 请求头 - 键值对 - 告诉服务器的额外的信息
~ 空行(\r\n)
~ 消息体 - 你要发给服务器的数据
1.3 HTTP响应
HTTP响应
~ 响应行 - HTTP/1.1 200 OK
- 响应状态码 - 404 Not Found / 403 Forbidden
~ 2XX: 成功了
~ 3XX: 重定向
~ 4XX: 请求有问题
~ 5XX: 服务器有问题
~ 响应头 - 键值对 - 服务器给浏览器的额外信息
~ 空行(\r\n)
~ 消息体 - 服务器发给浏览器的数据
- 如果请求的是图片, 就获取图片的二进制数据
- 如果请求的是网页, 就获取网页的源代码, 浏览器执行代码, 用户看到页面
1.4 常见状态码
2.HTML/CSS/JavaScript知识点补充
Python3 - 补充知识点之HTML 、JavaScript、CSS
3.Python程序联网获取数据
三方库: requests
镜像设置:
pip config set global.index-url https://pypi.douban.com/simple
pip install requests
pip list / pip freeze
练习: 1.抓取图片
import requests
resp = requests.get('https://tiebapic.baidu.com/forum/pic/item/09fa513d269759ee4cf1fe8fa5fb43166c22dfd5.jpg')
print(resp.status_code)
with open('baidu.png', 'wb') as file:
file.write(resp.content)
练习: 2.抓取某电影榜top250
import re
import requests
resp = requests.get(
url='https://movie.某.com/top250',
headers={
# 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0'
'User-Agent': 'BaiduSpider'
}
)
# https://movie.某.com/robots.txt 爬虫协议
# https://www.taobao.com/robots.txt 淘宝的爬虫协议
# 418 I am a teapot
print(resp.status_code)
# print(resp.text)
# 使用正则表达式捕获组从页面代码中提取电影名称
pattern = re.compile(r'\<span class="title"\>(.*?)\<\/span\>')
print(type(pattern))
print(pattern.findall(resp.text))