栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫实战01

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫实战01

第一天

这个博客为B站爬虫实战教程的笔记,我按照学习天数来记录。

一.手刃一个小爬虫

(参考“小爬虫案例.py”)
需求:用程序模拟浏览器,输入一个网址,从该网址中获取到资源和内容。

from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
print(resp.read().decode("utf-8"))


实际上对于响应返回的东西输出发现,“ b’ ”代表的是字节,"charset=utf-8"代表编码方式是utf-8,所以我们还需要在解码的时候进行处理。

from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
#解码——注意看解码方式
print(resp.read().decode("utf-8"))
#存储文件
with open("mybaidu.html",mode="w") as f:
    f.write(resp.read().decode("utf-8"))
print("over!")


此时我们拿到的,其实是页面源代码。

二.Web请求过程剖析 1.服务器渲染(在源代码中可以看到数据):在服务器那边直接把数据和html整合在一起,统一返回给浏览器。

2.客户端渲染(在源代码中看不到数据):第一次请求只要一个html骨架,第二次请求拿到数据,进行数据的展示。

在豆瓣电影分类的喜剧排行榜的源代码中找不到“憨豆先生精选集”等数据信息,这是客户端渲染的方式。

即,找到第二次请求,就可以获得数据。

3.抓包工具

详细见之前python爬虫五天入门博客第一天

三.http协议 1.协议:两个计算机之间为了能够流畅的进行沟通而设置的一个君子协定,常见的协议有TCP/IP.SOAP协议,HTTP协议,SMTP协议等等… 2.HTTP协议(Hyper Text Transfer Protcol超文本传输协议——即网站源代码),是用于从万维网(WWW.World Wide Web)服务器传输超文本到本地浏览器的传送协议,直白点,就是浏览器和服务器之间的数据交互遵守的就是HTTP协议。 HTTP协议把一条消息分为三大块内容。无论是请求还是响应都是三块内容。 (1)请求:

请求行 —> 请求方式(get,post等等) 请求URL地址 协议请求头 —> 放一些服务器要使用的附加信息请求体 —> 一般放一些请求参数 (2)响应:

状态行 —> 协议 状态码(404 500 302等等)响应头 —> 放一些客户端要使用的一些附加信息响应体 —> 服务器返回的真正客户端要用的内容(HTML,json)等 (3) 在后面写爬虫的时候要格外注意请求头和响应头,这两个地方一般包含比较重要的内容。 请求头中常见的重要内容:

User-Agent:请求载体的身份标识(用啥发送的请求)Referer:防盗链(这次请求从哪个页面来的?反爬会用到)cookie:本地字符串数据信息(用户登录信息,反爬的token) 响应头中重要内容:

cookie:本地字符串数据信息(用户登录信息,反爬的token)各种神奇的莫名其妙的字符串(这个需要经验,一般都是token字样,防止各种攻击和反爬) 3.请求方式:可以在抓包工具中查看

GET:显示提交
POST:隐示提交
(详细见之前python爬虫五天入门博客第一天)

四.Requests入门

(详细见之前python爬虫五天入门博客第一天)

1.get请求

例:搜狗上搜索周杰伦

import requests
url = "https://www.sogou.com/web?query=周杰伦"
resp = requests.get(url)
print(resp)


查看页面源代码:

print(resp.text)


搜狗进行了处理,此时我们要对请求头做一些修改,处理一下反爬。

url = "https://www.sogou.com/web?query=周杰伦"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.76"
}
resp = requests.get(url,headers=headers)
print(resp.text)


修改一下:

import requests
query = input("请输入一个明星:")
url = f"https://www.sogou.com/web?query={query}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.76"
}
resp = requests.get(url,headers=headers)
resp.encoding = 'utf-8'
print(resp.text)
2.post请求

发送的关键字必须放在字典中,通过传参发送。
例:百度翻译搜索“狗”

import  requests
#爬取百度翻译信息
url = 'https://fanyi.baidu.com/sug'
post_data = {"kw":"dog"}
#发送请求——请求方式:通过查看开发工具network查看浏览器请求方式,返回响应对象
resp=requests.post(url,data=post_data)
#如果返回的数据是json,可以直接resp.json()
print(resp.json())

修改一下

import  requests
#爬取百度翻译信息(不要使用https)
url = 'https://fanyi.baidu.com/sug'
post_data = {"kw":input("请输入搜索单词:")}
#发送请求——请求方式:通过查看开发工具network查看浏览器请求方式,返回响应对象
resp=requests.post(url,data=post_data)
#如果返回的数据是json,可以直接resp.json()
print(resp.json())
3.关闭

不关闭会出现请求次数过多导致无法访问。

resp.close()
4.练习

例:豆瓣排行榜喜剧分类中数据爬取
通过抓包工具查看我们所需要爬取的数据到底在哪里,

标头的URL中是带有参数的,参数可以在payload中查看。

import requests
url = "https://movie.douban.com/j/chart/top_list"
#重新封装参数
param = {
    "type": "24",
    "interval_id": "100:90",
    "action":"",
    "start": 0,
    "limit": 20
}
headers = {
     "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50"
}
resp = requests.get(url=url,params=param,headers = headers)
print(resp.json())
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号