文章目录

  • 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 常见状态码

python 抓取的数据是乱码 用python抓取数据违法吗_爬虫

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))