目录

  • 第一章
    • 了解爬虫是什么——以爬baidu.com为例
    • web请求过程解析
      • 页面渲染
    • HTTP协议
    • requests入门
      • 1.安装request
      • 2.案例1:简单爬取搜狗
      • 3.案例2:简单爬取百度翻译
      • 3.案例3:抓取豆瓣榜单
    • 本章内容总结

第一章

你好! 这是基于b站2021年路飞学成爬虫教程的python爬虫学习笔记,主要是方便作者复习和回顾课程内容。
已经发布第一章,第二章。

了解爬虫是什么——以爬baidu.com为例

爬⾍就是我们通过我们写的程序去抓取互联⽹上的数据资源. ⽐如, 此时我需要百度的资源. 在不考虑爬⾍的情况下, 我们肯定是打开浏览器, 然后输⼊百度的⽹址,紧接着, 我们就能在浏览器上看到百度的内容了. 那换成爬⾍呢? 其实道理是⼀样的. 只不过, 我们需要⽤代码来模拟⼀个浏览器, 然后同样的输⼊百度的⽹址. 那么我们的程序应该也能拿到百度的内容. 对吧~

在python中, 我们可以直接⽤urllib模块来完成对浏览器的模拟⼯作~

# 爬虫: 通过编写程序来获取到互联网上的资源
# 百度
# 需求: 用程序模拟浏览器. 输入一个网址. 从该网址中获取到资源或者内容
from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)#print(resp.read().decode("utf-8"))with open("mybaidu.html",'w',encoding='utf-8') as f:f.write(resp.read().decode("utf-8")) #将网页的页面源代码保存下来
print("over")

效果:

web请求过程解析

这⾥我们以百度为例. 在访问百度的时候, 浏览器会把这⼀次请求发送到百度的服务器(百度的⼀台电脑), 由服务器接收到这个请求, 然后加载⼀些数据. 返回给浏览器, 再由浏览器进⾏显示. 听起来好像是个废话…但是这⾥蕴含着⼀个极为重要的东⻄在⾥⾯, 注意, 百度的服务器返回给浏览器的不直接是⻚⾯, ⽽是⻚⾯源代码(由html, css, js组成). 由浏览器把⻚⾯源代码进⾏执⾏, 然后把执⾏之后的结果展示给⽤户. 所以我们能看到在上⼀节的内容中,我们拿到的是百度的源代码(就是那堆看不懂的⻤东⻄). 具体过程如图.

页面渲染

  1. 服务器渲染:这个最容易理解, 也是最简单的. 含义呢就是我们在请求到服务器的时候, 服务器直接把数据全部写⼊到html中, 我们浏览器就能直接拿到带有数据的html内容.
  2. 前端JS渲染
    这种就稍显麻烦了. 这种机制⼀般是第⼀次请求服务器返回⼀堆HTML框架结构. 然后再次请求到真正保存数据的服务器, 由这个服务器返回数据, 最后在浏览器上对数据进⾏加载.

HTTP协议

HTTP协议, Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议. 直⽩点⼉, 就是浏览器和服务器之间的数据交互遵守的就是HTTP协议.

请求:
请求⾏ -> 请求⽅式(get/post) 请求url地址 协议
请求头 -> 放⼀些服务器要使⽤的附加信息
请求体 -> ⼀般放⼀些请求参数

响应:
状态⾏ -> 协议 状态码
响应头 -> 放⼀些客户端要使⽤的⼀些附加信息
响应体 -> 服务器返回的真正客户端要⽤的内容(HTML,json)等

请求头中最常⻅的⼀些重要内容(爬⾍需要):

  1. User-Agent : 请求载体的身份标识(⽤啥发送的请求)
  2. Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)
  3. cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)

响应头中⼀些重要的内容:

  1. cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)
  2. 各种神奇的莫名其妙的字符串(这个需要经验了, ⼀般都是token
    字样, 防⽌各种攻击和反爬)

请求⽅式:
GET: 显示提交
POST: 隐示提交

requests入门

常⽤的抓取⻚⾯的模块通常使⽤⼀个第三⽅模块requests. 这个模块的优势就是⽐urllib还要简单, 并且处理各种请求都⽐较⽅便.

1.安装request

可以用pip安装(使用清华源会更快),如果使用pycharm,也可以参考这篇教程直接安装。

# 安装requests
# pip install requests
# 国内源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

2.案例1:简单爬取搜狗

import requests
query = input("请输入你喜欢的明星")
url = "https://www.sogou.com/web?query={query}"dic = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
resp = requests.get(url, headers=dic) #用user-agent处理了反爬
print(resp)
print(resp.text) #拿到网页代码resp.close() #爬完要关掉resp

3.案例2:简单爬取百度翻译

注意百度翻译这个url不好弄出来. 记住, 在输⼊的时候, 关掉各种输⼊法,要⽤英⽂输⼊法, 然后不要回⻋. 就能看到这个sug了
如下图:

import requestsurl = "https://fanyi.baidu.com/sug"s = input("请输入要翻译的英文")dat = {"kw": s #这⾥要和抓包⼯具⾥的参数⼀致.
}
# 请注意百度翻译的sug这个url. 它是通过post⽅式进⾏提交的. 所以我们也要模拟post请求
# 发送post请求, 发送的数据必须放在字典中, 通过data参数进行传递
resp = requests.post(url, data=dat)
# 返回值是json 那就可以直接解析成json
print(resp.json())#转化为字典resp.close() #爬完要关掉resp

3.案例3:抓取豆瓣榜单

有⼀些⽹站在进⾏请求的时候会校验你的客户端设备型号. ⽐如, 我们抓取⾖瓣电影。

#Request URL: https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20
#问号后面是参数。网址太长了,考虑重新封装参数
import requestsurl = 'https://movie.douban.com/j/chart/top_list'param = {"type": "24","interval_id": "100:90","action":"","start": "0","limit": "20",
}#resp = requests.get(url, params=param)
#print(resp.request.url)#显示完整网址#print(resp.request.headers)#被反爬了就首先看看user agent 是不是错了,果然错了header ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
resp = requests.get(url, params=param, headers=header)print(resp.json())
resp.close() #爬完要关掉resp

本章内容总结

  1. 爬⾍就是写程序去模拟浏览器⽤来抓取互联⽹上的内容
  2. python中⾃带了⼀个urllib提供给我们进⾏简易爬⾍的编写
  3. requests模块的简单使⽤, 包括get, post两种⽅式的请求. 以及User-Agent的介绍.

python爬虫笔记第一章(基于路飞学城课程)相关推荐

  1. python爬虫笔记第二章

    前言 你好! 这是基于b站2021年路飞学成爬虫教程的python爬虫学习笔记,主要是方便作者复习和回顾课程内容. 已经发布了第一章和第二章,可以在主页中查看. python爬虫笔记(第二章) 前言 ...

  2. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...

  3. python爬虫学习第一章

    <!DOCTYPE html> python爬虫第一章 python网络爬虫的学习 什么是网络爬虫 按照特定需求,从互联网中搜索有用信息网页进行过滤,就叫网络爬虫. 网络爬虫算法 当浏览信 ...

  4. Deep learning with python notebooks 笔记 第一章 深度学习基础

    第一章 深度学习基础 好的图表比文字传达的信息量多 图1-1帮助理清了人工智能.机器学习和深度学习之间的关系. 图1-2 清晰的阐述了经典程序设计范式和机器学习一种新的编程范式的不同.两种范式引出了两 ...

  5. 流畅的python读书笔记-第一章Python 数据模型

    第一章 python数据类型 1 隐式方法 利用collections.namedtuple 快速生成类 import collectionsCard = collections.namedtuple ...

  6. Python学习笔记 -- 第一章

    本笔记参考廖雪峰的Python教程 简介 Python是一种计算机高级程序设计语言. 用Python可以做什么? 可以做日常任务,比如自动备份你的MP3:可以做网站,很多著名的网站包括YouTube就 ...

  7. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城-Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫:- 定义调度器- 定 ...

  8. 路飞学城python电子书_路飞学城-Python开发集训-第一章

    路飞学城-Python开发集训-第一章 1.本章学习心得.体会 我: 间接性勤奋. 我: 学习方法论:输入--输出---纠正 我: 对对对 走出舒适区, 换圈子, 转思路,投资自我加筹码. 我: 圈子 ...

  9. Python程序设计基础第一章笔记:Python概述

    Python程序设计基础笔记 目录 Python程序设计基础笔记 第一章:python概述 1.1 python是这样一种语言 1.2 python版本之争 略 1.3 python编程规范与代码优化 ...

  10. 路飞学城python全栈开发_python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)...

    昨日内容回顾 1. 为什么要做前后端分离?-前后端交给不同的人来编写,职责划分明确.-API (IOS,安卓,PC,微信小程序...)-vue.js等框架编写前端时,会比之前写jQuery更简单快捷. ...

最新文章

  1. 6.3 OpenSSH
  2. linux系统怎么查看权限设置密码,linux系统怎么查看及修改文件读写权限设置
  3. python中parse是什么_Python中optparse模块使用浅析
  4. kube-scheduler 磁盘调度源码分析
  5. UDP丢包问题及解决方案
  6. 华为麒麟1020鸿蒙系统,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...
  7. mysql 连接 iOS_iOS连接mysql数据库及基本操作
  8. beginnersbook C 语言示例·翻译完成 | ApacheCN
  9. python中的一个现象,db.commit和db.commit()
  10. 写一个方法判断一个整数是否为质数_请写一个函数来检查用户提交的数据是否为整数...
  11. 标准Android按钮具有不同的颜色
  12. Java锁示例– ReentrantLock
  13. 软件逆向分析方法小结
  14. 徽章收夺·应用 ( 玩家:3-3 塞迪 )
  15. AI赋能的判定机制的倾向性
  16. 五年50起并购、股价持续上扬,复盘IBM的物联网进化之路
  17. 中移物联网入门记录(1)
  18. electron 修改修改应用默认图标
  19. 计算机丢失quartz.dll什么意思,计算机中丢失quartz.dll解决方法
  20. x61s 安装ubuntu问题总结

热门文章

  1. 用低代码+BPM赋能知识文档管理系统
  2. 笔记本CPU处理器HQ,H,U,M,型号之间的区别
  3. Devops知识技能树(译)
  4. 大数据时代的国际贸易理论新发展
  5. linux hostid 12位,linux下修改hostid
  6. lbj学习日记 06 一维数组和二维数组刷题课
  7. python中shape错误_python中shape错误
  8. cmd命令行常用指令
  9. 对比Excel学openpyxl系列之批注、文档保护、冻结窗格
  10. 微博 用户画像_面向新浪微博的用户画像研究