掌握requests发送请求的方法
掌握requesets对象的基础属性
掌握requests发送带headers的请求
掌握requests发送带参数的请求
2.重点学习requests模块,而非urllibrequests的底层实现就是urllib
requests简单易用
requests能够自动帮助我们解压(gzip压缩等) 网页内容
import requests #1.requests的作用 #发送网络请求 url = '' #输入访问的网址 response = requests.get(url) #2.response的常用对象属性方法 """ response.text str类型 response.content 获取内容字节类型,需要decode编码 response.status_code “获取状态码” response.request.headers 响应对应的请求头 response.headers 响应头 response.request.url 请求url地址 response.url 响应url地址 response.cookies 响应cookie(经过了set-cookie动作,返回cookiejar类型) response.json 自动将json字符串类型的响应内容转换为python对象(dict或list) """ #3.response.text 与 response.content 的区别 #4.案例:把网络上的图片保存到本地3.案例:把网络上的图片保存到本地
import requests
url = "https://img1.baidu.com/it/u=1455087344,2858358853&fm=253&fmt=auto&app=138&f=JPEG?w=795&h=500"
response = requests.get(url)
data = response.content
#保存图片
with open('美女1.jpg','wb') as f:
f.write(data)
二、发送带headers的请求
1.why(作用):请求带上headers,模拟浏览器,欺骗服务器,获取和浏览器一致的内容
2.headers的形式为:字典
3.用法:requests.get(url,headers=headers)
4.不携带headers ,容易被对方服务器识别,通常携带headers获取数据,更加精确
import requests
headers = {
#浏览器的信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
url = 'https://img2.baidu.com/it/u=4259054428,2817618542&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500'
response = requests.get(url,headers=headers).conten.decode()
5.练习:百度贴吧
#需求:根据用户输入,爬取贴吧的源码内容信息
'''
思路:
https://tieba.baidu.com/f?kw=%E7%BA%A2%E6%97%97%E8%BD%A6&ie=utf-8&pn=50
改变kw:可以切换任意贴吧
改变pn:可以任意翻页
'''
from urllib.parse import quote
import requests
user_input = ("请输入你想爬取的贴吧名称<示例:车>:")
user_page = input("请输入你想爬取多少页:<示例:4>:")
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
for i in range(int(user_page)):
#将中文进行url编码
url = f'https://tieba.baidu.com/f?kw={quote(user_input)}&ie=utf-8&pn={page*50}'
#获取源码内容
response = requests.get(url,headers=headers).content.decode()
with open(f'{user_input}_{page+1}.html','w',encoding='utf-8') as f:
f.write(response)
print(f'{user_input}=========第{page+1}页======采集完成======logging!!!! ')
百度贴吧:程序进阶--面向对象模式
from urllib.parse import quote
import requests
class TBSpider(object):
def __init__(self):
##爬虫原理第一步:准备数据,爬虫起始地址
self.user_input = ("请输入你想爬取的贴吧名称<示例:车>:")
self.user_page = input("请输入你想爬取多少页:<示例:4>:")
self.start_url = 'https://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
def parse_start_url(self):
#爬虫原理第二步:发送请求,获取响应
#解决用户输入的搜索关键字进行url编码
title = quote(self.user_input)
#解决用户输入的翻页
for page in range(int(self.user_page)):
#拼接地址
start_url = self.start_url.format(title,page*50)
#发送请求,获取响应
response = requests.get(url=start_url,headers=self.headers)
#类中方法之间的调用,前面要加上self
self.parse_response_data(response,page)
def parse_response_data(self,response,page):
#爬虫原理第三步:解析响应,数据提取
data = response.content.decode()
#类中方法之间的调用,前面要加上self
self.parse_save_data(data,page)
def parse_save_data(self,data,page):
#爬虫原理第四步:保存数据
with open(f'{self.user_input}_{page+1}.html','w','encoding='utf-8'')as f:
f.write(data)
print(f'{self.user_input}=====第{page+1}页=======采集完成====logging!!!!')
if __name__ == '__main__':
t = TBSpider()
t.parse_start_url()



