IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取 -> 正文阅读

[Python知识库]爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取

爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取

安装Requests

打开windows的cmd或者mac的终端,输入:

pip install requests

获取响应内容

requests.get( )方法获取响应内容

import requests

r=requests.get('https://www.baidu.com/?tn=02003390_3_hao_pg')

r.encoding
Out[3]: 'ISO-8859-1'

r.status_code
Out[4]: 200

响应对象(以r为例)的一些具体信息

响应对象信息描述
r.text服务器响应的内容,会自动根据响应头部的字符编码进行解码
r.encoding服务器内容使用的文本编码
r.status_code用于检测响应的状态码,返回200:请求成功了;返回4XX:表示客户端错误;返回5XX:表示服务器错误响应
r.content是字节方式的响应体,会自动解码gzip和deflate编码响应的数据
r.json是Requests中内置的JSON解码

案例1:第一个爬虫

爬取搜狗页面并保存

import requests

if __name__ == "__main__":
    # step1:指定url
    url = 'https://www.sogou.com/'
    # step2:发起请求
    # get方法会返回一个响应对象
    response = requests.get(url=url)
    # step3:获取响应数据.text返回的是字符串形式的响应数据
    page_text = response.text
    print(page_text)
    # step4:持久化存储
    with open('./sogou.html', 'w', encoding='utf-8') as fp:
        fp.write(page_text)
    print("爬取数据结束!")

定制Requests

有些网页,需要对Requests的参数进行设置才能获取需要的数据,包括传递URL参数、定制请求头、发送POST请求、设置超时

传递URL参数params:

URL参数可以用来请求特定的数据,比如说在百度中搜索某个特定值得到的网页。

  • 如果是自己直接构建的URL,数据一般会跟在一个问号后面,以键值对的形式放。如:“https://www.baidu.com/s?wd=%E9%A9%AC%E4%BA%91”。‘wd’就是参数名,后面的‘%E9%A9%AC%E4%BA%91’就是参数值。(每次都直接构建的话,就很麻烦了)
  • 在Requests中,可以直接把这些参数保存在字典中,用params(参数)传递到url中。
key_dict={'key1':'value1','key2':'value2'}
r=requests.get('http://httpbin.org/get',params=key_dict)
#url会正确编码为'http://httpbin.org/get?key1=value1&key2=value2'

[结合案例2:爬取搜狗指定词条对应的搜索结果页面,更容易理解]

定制请求头headers

  • 请求头:Headers提供了关于请求、响应或其他发送实体的信息。

  • 常用请求头信息:

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

-Connection:请求完毕后,是断开连接还是保持连接。

  • **查看请求头:**在浏览器中随便打开一个网页:单击右键-检查 或者快捷键f12,得到以下页面。

    在UA信息中可以看到请求载体的信息,包括浏览器信息等

在这里插入图片描述

  • UA伪装:是一种反反爬虫机制。门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体的身份标识是某一浏览器说明该请求是一个正常请求。如果不是,则表示该请求是一个不正常的请求。则请求可能会被拒绝。所以我们的爬虫程序需要进行UA伪装(绝大部分的爬虫程序都需要进行UA伪装)

在requests中,我们可以利用参数Headers伪装成浏览器身份,具体参考案例2

在这里插入图片描述

发送post请求

post请求就是:requests.post()。实现post请求,要传递一个字典给requests中的data参数,这个数据字典就会咋发出请求时自动编码为表单形式。【参考案例3】

设置超时timeout

timeout参数:在特定的描述结束之后停止等待响应。

即:如果服务器在timeout秒之内没有应答,则返回异常。

案例2:建议网页采集器

需求:爬取搜狗指定词条对应的搜索结果页面

import requests

#UA伪装:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体的身份标识是某一浏览器
# 说明该请求是一个正常请求。如果不是,则表示该请求是一个不正常的请求。则请求可能会被拒绝。
#所以我们的爬虫程序需要进行UA伪装
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
url='https://www.baidu.com/s?'
#处理url携带的参数:封装到字典中
kw=input("enter a word:")
param={
    'wd':kw
}
response=requests.get(url=url,params=param,headers=headers)
page_text=response.text
print(page_text)
fileName=kw+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'保存成功!')


案例3:破解百度翻译

需求:输入单词能够爬取百度翻译中对应的翻译内容

  • 1、打开百度翻译,输入单词后搜索,打开【检查】

在这里插入图片描述

  • 2、选择【XHR】类型的数据包,查看哪个数据包是用来得到翻译效果的

在这里插入图片描述

  • 3、找到对应的url

在这里插入图片描述

#-post请求(携带了参数)
#-响应数据是一组json数据
import requests
import json
#1.指定url
post_url='https://fanyi.baidu.com/sug'

#2.进行UA伪装
headers={'headers':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
#3.post请求参数处理,同get一样
word=input('enter a word:')
data={'kw':word}

#4.请求发送
response=requests.post(url=post_url,data=data,headers=headers)#是json数据
#5.获取相应数据:json()方法返回的是obj,(只有确定相应数据的类型,才可以使用json)
dic_obj=response.json()
print(dic_obj)

#6.进行持久化存储
filename=word+'.json'
fp=open(filename,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)#中文不能使用ascii码编码
print('over!')

案例4:豆瓣电影排行榜前250进行解析

案例来源于《python网络爬虫从入门到实战》。

需求:对豆瓣电影排行榜前250名的页面进行抓取;获取这些电影的名字。

  1. 分析网页:250名电影一共有10页,每页有25条数据。第一页的网址为”https://movie.douban.com/top250?start=0”;第二页的网址为:“https://movie.douban.com/top250?start=25”(也可以是https://movie.douban.com/top250?start=25&filter=,后面这个“&filter没影响”)

    可以发现:这些网页的网址,前面都是相同的,控制第几页的参数就是问号后面的“start”。

  2. 设置url:可以利用循环,构建完整的url字符串;也可以用参数params

  3. 设置headers,进行爬取,获取服务器数据。

  4. 利用bs4中的BeautifulSoup解析,获取电影名字

import requests
from bs4 import BeautifulSoup
def get_moives():
    headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
    moive_list=[]
    for i in range(0,10):
        link='https://movie.douban.com/top250?start='+str(i*25)
        r=requests.get(link,headers=headers,timeout=10)
        print(str(i+1),"页面响应状态:",r.status_code)
        # print(r.text)
        soup=BeautifulSoup(r.text,'lxml')#转化成BeautifulSoup对象
        div_list =soup.find_all('div',class_='hd')
        for each in div_list:
            moive=each.a.span.text.strip()
            moive_list.append(moive)
    return moive_list
print(get_moives())
'''
1 页面响应状态: 200
2 页面响应状态: 200
3 页面响应状态: 200
4 页面响应状态: 200
5 页面响应状态: 200
6 页面响应状态: 200
7 页面响应状态: 200
8 页面响应状态: 200
9 页面响应状态: 200
10 页面响应状态: 200
['肖申克的救赎', '霸王别姬', '阿甘正传', '泰坦尼克号', '这个杀手不太冷', '美丽人生', '千与千寻', '辛德勒的名单', '盗梦空间', '忠犬八公的故事', '星际穿越', '楚门的世界', '海上钢琴师', '三傻大闹宝莱坞', '机器人总动员', '放牛班的春天', '无间道', '疯狂动物城', '大话西游之大圣娶亲', '熔炉', '控方证人', '教父', '当幸福来敲门', '触不可及', '怦然心动', '龙猫', '末代皇帝', '寻梦环游记', '蝙蝠侠:黑暗骑士', '活着', '哈利·波特与魔法石', '指环王3:王者无敌', '乱世佳人', '素媛', '飞屋环游记', '摔跤吧!爸爸', '我不是药神', '何以为家', '十二怒汉', '哈尔的移动城堡', '少年派的奇幻漂流', '鬼子来了', '大话西游之月光宝盒', '猫鼠游戏', '天空之城', '闻香识女人', '天堂电影院', '指环王2:双塔奇兵', '钢琴家', '让子弹飞', '罗马假日', '海蒂和爷爷', '指环王1:护戒使者', '黑客帝国', '大闹天宫', '教父2', '死亡诗社', '辩护人', '狮子王', '绿皮书', '搏击俱乐部', '饮食男女', '美丽心灵', '本杰明·巴顿奇事', '窃听风暴', '情书', '穿条纹睡衣的男孩', '两杆大烟枪', '西西里的美丽传说', '看不见的客人', '拯救大兵瑞恩', '音乐之声', '飞越疯人院', '小鞋子', '阿凡达', '哈利·波特与死亡圣器(下)', '沉默的羔羊', '海豚湾', '致命魔术', '禁闭岛', '布达佩斯大饭店', '蝴蝶效应', '美国往事', '心灵捕手', '低俗小说', '春光乍泄', '摩登时代', '七宗罪', '喜剧之王', '致命ID', '杀人回忆', '功夫', '超脱', '哈利·波特与阿兹卡班的囚徒', '加勒比海盗', '被嫌弃的松子的一生', '红辣椒', '狩猎', '请以你的名字呼唤我', '7号房的礼物', '剪刀手爱德华', '勇敢的心', '断背山', '唐伯虎点秋香', '入殓师', '第六感', '天使爱美丽', '哈利·波特与密室', '爱在黎明破晓前', '重庆森林', '一一', '幽灵公主', '蝙蝠侠:黑暗骑士崛起', '小森林 夏秋篇', '阳光灿烂的日子', '菊次郎的夏天', '超能陆战队', '完美的世界', '无人知晓', '爱在日落黄昏时', '消失的爱人', '小森林 冬春篇', '借东西的小人阿莉埃蒂', '倩女幽魂', '甜蜜蜜', '侧耳倾听', '幸福终点站', '时空恋旅人', '驯龙高手', '萤火之森', '玛丽和马克思', '怪兽电力公司', '教父3', '一个叫欧维的男人决定去死', '大鱼', '玩具总动员3', '告白', '傲慢与偏见', '神偷奶爸', '寄生虫', '釜山行', '阳光姐妹淘', '射雕英雄传之东成西就', '被解救的姜戈', '未麻的部屋', '恐怖直播', '哪吒闹海', '我是山姆', '哈利·波特与火焰杯', '血战钢锯岭', '头号玩家', '新世界', '模仿游戏', '七武士', '喜宴', '黑客帝国3:矩阵革命', '花样年华', '头脑特工队', '电锯惊魂', '三块广告牌', '卢旺达饭店', '你的名字。', '达拉斯买家俱乐部', '疯狂原始人', '上帝之城', '谍影重重3', '英雄本色', '风之谷', '心迷宫', '惊魂记', '九品芝麻官', '纵横四海', '海街日记', '岁月神偷', '记忆碎片', '忠犬八公物语', '荒蛮故事', '爱在午夜降临前', '绿里奇迹', '爆裂鼓手', '小偷家族', '贫民窟的百万富翁', '色,戒', '真爱至上', '东邪西毒', '无敌破坏王', '疯狂的石头', '冰川时代', '雨中曲', '黑天鹅', '你看起来好像很好吃', '恐怖游轮', '2001太空漫游', '雨人', '茶馆', '恋恋笔记本', '魔女宅急便', '遗愿清单', '城市之光', '萤火虫之墓', '可可西里', '大佛普拉斯', '无间道2', '牯岭街少年杀人事件', '虎口脱险', '源代码', '人工智能', '初恋这件小事', '海边的曼彻斯特', '背靠背,脸对脸', '东京教父', '小丑', '罗生门', '终结者2:审判日', '青蛇', '奇迹男孩', '二十二', '波西米亚狂想曲', '房间', '疯狂的麦克斯4:狂暴之路', '新龙门客栈', '无耻混蛋', '魂断蓝桥', '血钻', '千钧一发', '步履不停', '黑客帝国2:重装上阵', '彗星来的那一夜', '战争之王', '崖上的波妞', '心灵奇旅', '爱乐之城', '谍影重重2', '燃情岁月', '阿飞正传', '海洋', '谍影重重', '再次出发之纽约遇见你', '穿越时空的少女', '火星救援', '末路狂花', '朗读者', '香水', '地球上的星星', '我爱你', '完美陌生人', '千年女优', '驴得水', '聚焦', '浪潮']
'''
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:11:50  更:2022-06-01 15:13:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 11:19:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码