爬虫分类:
1. 通用网络爬虫 百度,门户网站
2. 聚焦网络爬虫
3. 增量式网络爬虫
4. 深层页面爬虫
简单爬虫架构:
1. URL管理器 Universal Resource Location
2. 网页下载器
3. 网页解析器
4. 输出管理器
Python实现网页解析的常用工具
1. 正则表达式 Regular Expression
2. Lxml库 Xpath语法
HTML XML
<div>
<p>你好</p>
</div>
3. BeautifulSoup BS
常见爬虫框架
Scrapy 最流行
Pyspider 国人编写
Cola 分布式爬虫框架
Http请求的含义
http://wx3.sinaimg.cn/mw600/00745YaMgy1g0su3o5sp6j30go0go0u8.jpg
web服务流程
发出请求,请求包含3部分
请求头部
请求正文
实体内容
接收响应
常见请求方式
get
post
爬取百度logo
>>> import requests
>>> response = requests.get('https://www.baidu.com/img/bd_logo1.png')
>>> with open('logo.png','wb') as logo:
... logo.write(response.content)
...
response.text
response.encoding
response.content
response.status_code
定制请求头
>>> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3514.0 Safari/537.36'}
>>> url = 'https://www.douban.com'
>>> response = requests.get(url,headers=headers)
https://www.douban.com/search?q=python
https://www.douban.com/login?username=tom&password=1234
重定向
>>> r = requests.get('http://www.douban.com')
>>> r.history
[<Response [301]>]
设置超时时间
>>> requests.get('http://www.douban.com',timeout=2)
<Response [200]>
传递URL参数
>>> payload={'q':'python','cat':1001}
>>> r = requests.get('https://www.douban.com/search',params=payload)
>>> r.url
'https://www.douban.com/search?q=python&cat=1001'
Urllib Python标准库
网页解析基础
HTML Hyper Test Markup Language
XML Extensible Markup Language 可扩展标记语言
<book lang="en" font="Couier New">
<name>Spider</name>
<author>
<firstname></firstname>
<lastname></lastname>
</author>
<price>30.0</price>
</book>
<html>
<head>
<meta charset="utf-8"/>
<title>Example Page</title>
<style></style>
<script></script>
</head>
<body>
<div id="images">
<a href="image1.html">Name: My Image 1<br><img src="image1.jpg"/></a>
<a href="image2.html">Name: My Image 2<br><img src="image2.jpg"/></a>
<a href="image3.html">Name: My Image 3<br><img src="image3.jpg"/></a>
<a href="image4.html">Name: My Image 4<br><img src="image4.jpg"/></a>
<a href="image5.html">Name: My Image 5<br><img src="image5.jpg"/></a>
</div>
</body>
</html>