python爬虫

第一个爬虫基础实例

#phthon提供了一个模块能发送请求
from urllib.request import urlopen
#url = "http://www.baidu.com"
url = "https://wangjian.run"
resp = urlopen(url) #打开URL
#print(resp)
result = resp.read() #读取url
#print(result)#此时看到的是网站源代码
print(result.decode("utf-8"))#字节转码后 此时看着舒服些,也是页面源代码

模块

requests模块

requests总结:


requests.get() 发送get请求,请求参数可以直接放在url的?后面,也可以放在字典里面,传递给params
requests.post() 发送post请求,请求参数要放在字典里面,传递给data
resp.text 接受文本
resp.json() 接受json
resp.content接受字节

安装requests模块

*********官方安装**************
这是官方镜像源:https://pypi.org/simple/
requests模块:核心功能就是发送请求
安装方法1: pycharm 下面有个terminal(控制台)
pip install requests
安装方法2:待定

***********国内镜像安装************
因为是国外的,可能下载比较慢,可以选择国内的镜像下载(pip清华源)
https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
开始安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

**怎么判断模块有没有安装成功**
直接在代码中导入模块,然后运行,没有报错 就代表安装成功了。
import requests

案例1get请求:

import requests
contert = input("请输入你想搜的信息:")
#url = "https://www.sogou.com/web?query=周润发"
url = f"https://www.sogou.com/web?query={contert}"
url1 = "https://www.wangjian.run"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
res = requests.get(url,headers=headers)#写header=哈哈也行 ,只要和定义的一样就行
# print(res) #<Response [200]> 只显示状态码
page_source = res.text
"""
此验证码用于确认这些请求是您的正常行为而不是自动程序发出的,需要您协助验证。
此时搜狗可能已经发现 不是正常的浏览方式,进行访问的
"""
print(page_source)
#print(res.request.headers)  # 'User-Agent': 'python-requests/2.31.0'...........

案例2post请求

import requests
import json

url = "https://fanyi.baidu.com/sug" #抓包里看到的
# 准备参数
dataa = {
    "kw": "ok"#抓包里看到的
}
resp = requests.post(url,data=dataa)#抓包里看到的
#print(resp)#<Response [200]>
#print(resp.text)#源码 是个json字符串
#dic = json.loads(resp.text)#这是方案1
#print(dic)#字典了,看着舒服些

#前提是 服务器返回的是json字符串,
# 直接用print(resp.txt)就可以判断是不是JSON
dic = resp.json() #这是方案2
print(dic)

豆瓣电影

import requests

# # 方式1:不好,看起来费劲 参数太多
# url = "https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20"
# headers = {
#     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
# }
# resp = requests.get(url, headers=headers)
# # 此时返回的不是json字符串requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
# # print(resp.text)
# # lst = resp.json()
# # print(lst)
# dic = resp.json()
# #print(dic)
#
# # 方式2:把参数单独拿出来
#
# #拿到页数 方式1
# # for i in [0,20,40,60,80]:
# #     print(i)
# #拿到页数 方式2
# # for i in range(0,100,20):
# #     print(i)
# #拿到页数 方式3
# for i in range(5):
#     #print(i*20)
#     start = i* 20 # 0 20 40 60 80
#     url1 = "https://movie.douban.com/j/chart/top_list"
#     headers = {
#         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
#     }
#     dic = {
#         "type": "13",
#         "interval_id": "100:90",
#         "action": "",
#         "start": start,  # 0 是第一页的数 20是第二页的数据 40是第三页数据
#         "limit": "20",
#     }
#     #print(dic)
#     # 发送get请求,并将参数带过去,用params传参
#     resp1 = requests.get(url1, params=dic, headers=headers)
#
#     print(resp1.json())
#     #print(resp1.request.url)  # https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20
#
# #以上已经拿到json数据了

#拿到页数 方式4
# for i in range(5):
#
#     url2 = f"https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start={i * 20}&limit=20"
#     headers = {
#         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
#     }
#     resp2 = requests.get(url2, headers=headers)
#     lst1 = resp2.json()
#     for item in lst1:
#         pass

下载文件

下载图片

import requests
url = "https://wangjian.run/wp-content/uploads/2024/03/20240315232304316-1710516184-IMG_1654.jpg"
resp = requests.get(url)
content = resp.content #拿到的是字节
#存起来
with open("图片.jpg",mode = "wb") as f:
    f.write(content)

下载视频

import requests
url = "https://wangjian.run/wp-content/uploads/2023/06/1686880731-蓝色矩形循环跳动.mp4"
resp = requests.get(url)
content = resp.content #拿到的是字节
#存起来
with open("ceshi.mp4",mode = "wb") as f:
    f.write(content)

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容