zyxnhr

一 jupyter简单使用

1.1 安装

安装 jupyter

root@darren-virtual-machine:~# pip3  install Jupyter

启动

root@darren-virtual-machine:~# jupyter notebook --allow-root

[I 19:46:20.681 NotebookApp] Serving notebooks from local directory: /root
[I 19:46:20.681 NotebookApp] The Jupyter Notebook is running at:
[I 19:46:20.681 NotebookApp] http://localhost:8888/?token=64965e6933d9f6b4b94136448c2f3161863cda2e873b1013
[I 19:46:20.681 NotebookApp]  or http://127.0.0.1:8888/?token=64965e6933d9f6b4b94136448c2f3161863cda2e873b1013

访问http://127.0.0.1:8888/?token=64965e6933d9f6b4b94136448c2f3161863cda2e873b1013

新建一个forder

1.2 jupyter的基本操作

  • 创建cell: a和b
  • 删除cell: x和dd
  • 切换模式: y和m(代码和markdown模式的切换)
  • 执行cell: shift + enter
  • 查看帮助信息: shift + Tab
  • 补全代码信息: Tab

二 爬虫基础

2.1 爬虫概念

爬虫:爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程。

爬虫的分类

  • 通用爬虫 爬取一整张页面的数据, 就是搜索引擎抓取系统的一个重要组成部分
  • 聚焦爬虫 建立在通用爬虫的基础上(数据解析(正则, BeautifulSoup4, xpath))
  • 增量式爬虫 实时监测网络上的数据,只爬取更新的数据

反爬机制

robots.txt协议 文本协议, 防君子不防小人

disabled

作为学习使用,可以忽略disabled协议

User-Agent检测(User-Agent就是请求载体的身份标识)

包含有系统,浏览器及版本

反反爬策略:使用相关的技术手段来破解相关反爬机制

协议

robots.txt协议

请求头协议

  • User-Agent: 请求载体的身份标识
  • Connection: close

响应头

Content-Type: 响应数据类型

 

fidder抓包工具,主要做手机端的一个数据爬取

HTTP和HTTPS

安全加密方式:

  1. 对称密钥加密: 客户端加密的数据和密钥一并发给服务器端(缺点是数据和密钥会被截获)
  2. 非对称密钥加密:服务端生成公私钥,把公钥发给客户端,客户端使用公钥加密数据,发送给服务端,服务端用私钥解密(缺点是公钥无法验证真伪)
  3. 证书密钥加密: 在非对称密钥加密的基础上,通过第三方证书认证机构对公钥进行数字签名(能够验证公钥真伪)

2.2  requests模块基本使用 

requests模块的意义:发送请求获取响应数据

requests模块的作用:模拟浏览器发送请求

requests模块的安装

root@darren-virtual-machine:~/tmp# pip3 install requests

Requirement already satisfied: requests in /usr/lib/python3/dist-packages (2.18.4)

requests模块的编码流程

  • 1.指定URL
  • 2.向网站发送请求
  • 3.获取响应数据
  • 4.持久化存储

2.2.1 爬取速购首页

根据上面流程,爬取一个sogou的首页数据

爬虫代码 

#需求,导入request模块
import requests
#指定url
sogou_url = "https://www.sogou.com/"

# 2.向网站发送请求
response = requests.get(url=sogou_url)
print(response)

# 3.获取响应数据
# 使用text方法可以获取到页面文本数据, 使用什么方法取决于服务器返回的数据类型, .json(获取json序列化的数据) .content获取二进制的数据
page_text = response.text
print(page_text)

# 4.持久化存储
with open("./sogou.html", \'w\', encoding="utf-8") as f:
    f.write(page_text)

执行完成,查看生成得到代码文件

2.2.2 爬取搜狗指定词条搜索后的页面数据

# 需求:爬取搜狗指定词条搜索后的页面数据
import requests
# 1.指定URL
url = "https://www.sogou.com/web?query=周杰伦"
# 2.向网站发送请求
response = requests.get(url=url)
response.encoding = "utf-8"  # 给响应对象里面的所有数据进行编码,格式为utf-8,如果不设置,会出现乱码
# 3.获取响应数据
page_text = response.text
# 4.持久化存储
with open("./jay.html", \'w\', encoding="utf-8") as f:
    f.write(page_text)

执行后

 

打开jayhtml

出现这种情况,是由于使用反爬机制导致的,由于网站有UA检测机制,所以我们需要进行UA伪装,将headers作用到我们的发送请求过程中

反爬机制: UA检测(User-Agent)

反反爬策略: UA伪装

把上面的字典封装到一个请求头里面

# 需求:爬取搜狗指定词条搜索后的页面数据
import requests
request_headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
# 1.指定URL
url = "https://www.sogou.com/web?query=周杰伦"
# 2.向网站发送请求
# 由于网站有UA检测机制,所以我们需要进行UA伪装,将headers作用到我们的发送请求过程中
response = requests.get(url=url,headers=request_headers)
response.encoding = "utf-8"  # 给响应对象里面的所有数据进行编码,格式为utf-8,如果不设置,会出现乱码
# 3.获取响应数据
page_text = response.text
# 4.持久化存储
with open("./jay.html", \'w\', encoding="utf-8") as f:
    f.write(page_text)

删掉jay.html.重新执行打开

 

正常打开

2.2.3 破解百度翻译

在使用翻译的时候,当更换翻译的单词,只有局部的页面发上变化,其他是不变的,使用的ajax的动态请求,当我们使用翻译,翻译cat,使用F12查看XHR信息

有以下信息

Request URL: https://fanyi.baidu.com/sug
Request Method: POST
Status Code: 200 
Remote Address: 117.34.61.202:443
Referrer Policy: no-referrer-when-downgrade
content-type: application/json; charset=utf-8
kw: ca

使用POST请求

import requests
word = input("Please input a word: ")
url = "https://fanyi.baidu.com/sug"
request_headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
form_data = {
    "kw": word
}
response = requests.post(url=url, headers=request_headers, data=form_data)

print(response.json())

执行,输入dog

 

2.2.4 爬取豆瓣电影分类排行榜

https://movie.douban.com/中的电影详情数据

页面分析

访问https://movie.douban.com/,点击排行榜,点击喜剧

使用F12,查看加载数据

在之用滚动条上拉取过程中,会有数据的更新

 当使用GET请求时

 爬虫代码

import requests
url = "https://movie.douban.com/j/chart/top_list"
request_headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
form_data = {
    "type": "24",
    "interval_id": "100:90",
    "action":"",
    "start": "0",
    "limit": "200"
}
response = requests.get(url=url, headers=request_headers, params=form_data)
page_json = response.json()
print(len(page_json), page_json)

执行结果

200 [{\'rating\': [\'9.6\', \'50\'], \'rank\': 1, \'cover_url\': \'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2354179225.jpg\', \'is_playable\': False, \'id\': \'5133063\', \'types\': [\'喜剧\'], \'regions\': [\'英国\'], \'title\': \'憨豆先生精选辑\', \'url\': \'https://movie.douban.com/subject/5133063/\', \'release_date\': \'1997\', \'actor_count\': 8, \'vote_count\': 4692, \'score\': \'9.6\', \'actors\': [\'罗温·艾金森\', \'保罗·布朗\', \'理查德·布赖尔斯\', \'Angus Deayton\', \'罗宾·德里斯科尔\', \'卡罗琳·昆汀\', \'Rudolph Walker\', \'理查德·威尔逊\'], \'is_watched\': False}, {\'rating\': [\'9.5\', \'50\'], \'rank\': 2, \'cover_url\': \'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2578474613.jpg\', \'is_playable\': True, \'id\': \'1292063\', \'types\': [\'剧情\', \'喜剧\', \'爱情\', \'战争\'], \'regions\': [\'意大利\'], \'title\': \'美丽人生\', \'url\': \'https://movie.douban.com/subject/1292063/\', \'release_date\': \'2020-01-03\', \'actor_count\': 29, \'vote_count\': 950297, \'score\': \'9.5\', \'actors\': [\'罗伯托·贝尼尼\', \'尼可莱塔·布拉斯基\', \'乔治·坎塔里尼\', \'朱斯蒂诺·杜拉诺\', \'赛尔乔·比尼·布斯特里克\', \'玛丽萨·帕雷德斯\', \'霍斯特·布赫霍尔茨\', \'利迪娅·阿方西\', \'朱利亚娜·洛约迪切\', \'亚美利哥·丰塔尼\', \'彼得·德·席尔瓦\', \'弗朗西斯·古佐\', \'拉法埃拉·莱博罗尼\', \'克劳迪奥·阿方西\', \'吉尔·巴罗尼\', \'马西莫·比安奇\', \'恩尼奥·孔萨尔维\', \'吉安卡尔洛·科森蒂诺\', \'阿伦·克雷格\', \'汉尼斯·赫尔曼\', \'弗兰科·梅斯科利尼\', \'安东尼奥·普雷斯特\', \'吉娜·诺维勒\', \'理查德·塞梅尔\', \'安德烈提多娜\', \'迪尔克·范登贝格\', \'奥梅罗·安东努蒂\', \'沈晓谦\', \'张欣\'], \'is_watched\': False}, {\'rating\': [\'9.5\', \'50\'], \'rank\': 3, \'cover_url\': \'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2206737207.jpg\', \'is_playable\': True, \'id\': \'1303408\', \'types\': [\'喜剧\', \'动作\', \'爱情\'], \'regions\': [\'美国\'], \'title\': \'福尔摩斯二世\', \'url\': \'https://movie.douban.com/subject/1303408/\', \'release_date\': \'1924-04-21\', \'actor_count\': 11, \'vote_count\': 12068, \'score\': \'9.5\', \'actors\': [\'巴斯特·基顿\', \'凯瑟琳·麦奎尔\', \'乔·基顿\', \'Ward Crane\', \'Jane Connelly\', \'George Davis\', \'Doris Deane\', \'Betsy Ann Hisle\', \'丘比·摩根\', \'John Patrick\', \'Ford West\'], \'is_watched\': False}, {\'rating\': [\'9.5\', \'50\'], \'rank\': 4, \'cover_url\': \'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2527089368.jpg\', \'is_playable\': False, \'id\': \'30203557\', \'types\': [\'喜剧\'], \'regions\': [\'中国香港\'], \'title\': \'黄子华栋笃笑之金盆

分类:

技术点:

相关文章:

  • 2022-01-21
  • 2021-12-15
  • 2022-01-22
  • 2021-08-06
  • 2022-01-13
  • 2021-11-27
  • 2019-07-23
  • 2021-07-29
猜你喜欢
  • 2022-02-08
  • 2021-09-28
  • 2021-09-11
  • 2021-07-29
  • 2022-12-23
  • 2021-07-23
  • 2021-06-14
相关资源
相似解决方案