爬虫1---Urllib库使用
今天开始跟着尚硅谷学习爬虫,部分资源来自尚硅谷
爬虫
1、通用爬虫:通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
2、聚焦爬虫: 聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
反爬手段
1、user-Agent
2、代理ip
3、验证码访问
4、动态加载网页
5、数据加密
Urllib 库使用:
1、定义一个url(需要访问的地址)
2、模拟游览器向服务器发送请求
3、获取响应中的页面的源码(需要解码)
# 使用urllib来获取百度首页的源码 import urllib.request # (1)定义一个url 就是你要访问的地址 url = 'http://www.baidu.com' # (2)模拟浏览器向服务器发送请求 response响应 response = urllib.request.urlopen(url) # (3)获取响应中的页面的源码 content 内容的意思 # read方法 返回的是字节形式的二进制数据 # 我们要将二进制的数据转换为字符串 # 二进制--》字符串 解码 decode('编码的格式') content = response.read().decode('utf-8') # (4)打印数据 print(content)
urllib 的1个类型和6个方法
response 是HTTPResponse的类型
response.read():一个字节一个字节的读
response.read(5):返回5个字节
response.readline():一行一行读取
response.readlines():也是一行一行读取
response.getcode():返回状态码
response.geturl():访问的url地址
response.getheaders():响应头获取的状态信息
import urllib.request url = 'http://www.baidu.com' # 模拟浏览器向服务器发送请求 response = urllib.request.urlopen(url) # 一个类型和六个方法 # response是HTTPResponse的类型 # print(type(response)) # 按照一个字节一个字节的去读 # content = response.read() # print(content) # 返回多少个字节 # content = response.read(5) # print(content) # 读取一行 # content = response.readline() # print(content) # content = response.readlines() # print(content) # 返回状态码 如果是200了 那么就证明我们的逻辑没有错 # print(response.getcode()) # 返回的是url地址 # print(response.geturl()) # 获取是一个状态信息 print(response.getheaders()) # 一个类型 HTTPResponse # 六个方法 read readline readlines getcode geturl getheaders
urllib下载
urllib.request.urlretrieve("下载路径",文件名 ) 文件名需要自己写后缀名
import urllib.request # 下载网页 # url_page = 'http://www.baidu.com' # url代表的是下载的路径 filename文件的名字 # 在python中 可以变量的名字 也可以直接写值 # urllib.request.urlretrieve(url_page,'baidu.html') # 下载图片 # url_img = 'https://img1.baidu.com/it/u=3004965690,4089234593&fm=26&fmt=auto&gp=0.jpg' # # urllib.request.urlretrieve(url= url_img,filename='lisa.jpg') # 下载视频 url_video = 'https://vd3.bdstatic.com/mda-mhkku4ndaka5etk3/1080p/cae_h264/1629557146541497769/mda-mhkku4ndaka5etk3.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1629687514-0-0-7ed57ed7d1168bb1f06d18a4ea214300&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest=' urllib.request.urlretrieve(url_video,'hxekyyds.mp4')
请求对象的定制(user-Agent反爬解决办法)
import urllib.request url = 'https://www.baidu.com' # url的组成 # https://www.baidu.com/s?wd=周杰伦 # http/https www.baidu.com 80/443 s wd = 周杰伦 # # 协议 主机 端口号 路径 参数 锚点 # http 80 # https 443 # mysql 3306 # oracle 1521 # redis 6379 # mongodb 27017 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' } # 因为urlopen方法中不能存储字典 所以headers不能传递进去 # 请求对象的定制 request = urllib.request.Request(url=url,headers=headers) response = urllib.request.urlopen(request) content = response.read().decode('utf8') print(content)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通