介绍

Python爬虫是一种自动化程序,可通过网络爬取数据并将其存储到本地或其他地方。它模拟人类浏览器行为,访问网页并提取所需的数据,如文本、图像、音频和视频等。Python爬虫可用于从互联网上获取大量数据,例如搜索引擎结果、社交媒体信息、新闻和股票数据等。它在数据挖掘、机器学习和人工智能等领域中有着广泛的应用。
Python爬虫的主要作用是帮助用户从互联网上获取大量的数据,从而用于各种数据分析和研究。具体来说,Python爬虫的作用包括:

  1. 数据采集与清洗:通过爬虫技术,可以从网络上收集各种数据,如新闻、博客、论坛等,然后利用Python的数据处理库进行数据清洗与整理。
  2. 竞品分析:通过爬取竞品的数据,可以帮助企业了解竞争对手的营销策略、产品特点等,从而有针对性地制定自己的发展战略。
  3. SEO优化:通过爬虫技术,可以分析网站的关键词排名、页面质量等信息,从而帮助网站优化SEO效果,提高网站的流量和曝光率。
  4. 投资分析:通过爬虫技术,可以收集和分析各种金融数据,如股票行情、财经新闻等,从而帮助投资者制定投资策略。
  5. 情报分析:通过爬虫技术,可以收集和分析各种情报数据,如政府公报、社交媒体信息等,从而帮助政府、企业等制定决策。
    总之,Python爬虫是一种非常有用的技术,可以帮助用户从互联网上获取大量的数据,并用于各种分析和研究领域。

爬虫初始深入

爬虫在使用场景中的分类:
通用爬虫:抓取系统重要组成部分。抓取的是一整张页面数据。
聚焦爬虫:是建立在通用爬虫的基础之上。抓取的是页面中特定的局部内容。
增量式爬虫:检测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。

HTTP协议

网络协议:是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。

HTTP协议:(超文本传输协议)是一种网络通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。默认端口:80

HTTPS协议是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。默认端口:443

HTTP协议的主要特点:
1、支持客户/服务器模式。
2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTPS协议的主要特点:
1、内容加密:采用混合加密技术,中间者无法直接查看明文内容
2、验证身份:通过证书认证客户端访问的是自己的服务器
3、保护数据完整性:防止传输的内容被中间人冒充或者篡改
4、SSL证书需要购买申请,功能越强大的证书费用越高
5、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗
6、HTTPS连接缓存不如HTTP高效,流量成本高
7、HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。

URL地址介绍

URL是Uniform Resource Locator(统一资源定位符)的缩写,是Web上用于定位资源的标识符。URL由多个部分组成,包括协议、主机名、端口号、路径和查询字符串等。

下面是各部分的介绍:
协议:指定客户端与服务器之间传输数据的方式,常见协议有HTTP、HTTPS、FTP、SMTP等。
主机名:指定服务器的名称或IP地址,比如www.example.com或192.168.1.1。
端口号:指定服务器上的网络端口,可以用于标识不同的服务,比如HTTP服务通常使用80端口,HTTPS服务通常使用443端口。
路径:指定服务器上要访问的文件或目录的路径,比如/example/index.html。
查询字符串:用于向服务器传递参数,通常以问号?开始,多个参数之间用&连接,比如?id=123&name=John。

例如,下面是一个URL地址:
https://www.example.com:443/example/index.html?id=123&name=John
其中,协议是HTTPS,主机名是www.example.com,端口号是443,路径是/example/index.html,查询字符串是id=123&name=John。

requests模块

requests模块: python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
作用: 模拟浏览器发请求。
requests模块的编码流程: 指定url-发起请求-获取响应数据-持久化存储
环境安装: pip install requests

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
if __name__ == "__main__":
#step 1:指定url
url = 'https://www.sogou.com/'
#step 2:发起请求
response = requests.get(url=url)
#step 3:获取响应数据.text返回的是字符串形式的响应数据
page_text = response.text
print(page_text)
#step 4:持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
print('爬取数据结束! ! !')

简易网页采集器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#UA:User-Agent.(请求载体的身份标识)
#UA伪装:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器
#说明该请求是一个正常的请求,但是,如果检测到的载体身份标识不是基于某一款浏览器的,则表示该请求为不正常的请求(爬虫),则服务器端就很有可能拒绝该次请求

#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
import requests
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54'
}
url = 'https://www.sogou.com/web'
#处理url携带的参数: 封装到宇典中

kw = input('enter a word: ')
param = {
'query' :kw
}
#对指定的url发起的请求对应的urL是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)

page_text = response.text
fileName = kw+ '.html'
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName, '保存成功!!!')

破解百度翻译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests
import json

if __name__ == "__main__":
#指定url
post_url = 'https://fanyi.baidu.com/sug'
# 进行UA伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54'
}
# post请求参数处理(同get请求一致)
word = input('enter a word:')
data = {
'kw':'word'
}
# 请求发送
response = requests.post(url=post_url,data=data,headers=headers)
# 获取响应数据:json()方法返回的是obj(如果确认响应数据是json类型的,才可以使用json())
dic_obj = response.json()

# 持久化存储
fileName = word+'.json'
fp = open(fileName,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)

print('over!')

爬取豆瓣电影分类排行榜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
import json

if __name__ == "__main__":
#指定url
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': '1', # 从库中的第几部电影去取
'limit': '20', # 一次取出的个数
}
# 进行UA伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54'
}

# 请求发送
response = requests.get(url=url,params=param,headers=headers)

list_data = response.json()

fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)

print('over!')

连载中…