spider学习

1.基本使用

import urllib.request

#要访问的网址
url="https://www.baidu.com/"

#向服务器发送请求
response=urllib.request.urlopen(url)

#获得相应页面中的源码
#read()方法获得的是二进制,需要解码
content=response.read().decode('utf-8')

print(content)#打印内容

print(type(response))#打印类型
#response类型为HTTPResponse

#read()方法是一个字节一个字节去读
#read(5)是读五个字节

# 读一行
# content=response.readline()
# 读所有
# content=response.readlines()

# 返回状态码
print(response.getcode())
# 返回url地址
print(response.geturl())
# 获取一个状态信息
print(response.getheaders())

2.下载

import urllib.request

#下载网址
url_page='https://www.baidu.com/'

# url代表的是下载的路径  filename文件的名字
# 在python中  可以变量的名字 也可以直接写值
urllib.request.urlretrieve(url_page,'baidu.html')

#下载图片
url_imag='https://tse1-mm.cn.bing.net/th/id/OIP-C.yGSn5XAeJ-efuAmJ5hke_AAAAA?w=300&h=180&c=7&r=0&o=5&dpr=1.5&pid=1.7'
urllib.request.urlretrieve(url_imag,'hdu.jpg')

#下载视频
url_video='http://img.v.jstv.com/images/2024/8/29/JSTV_JSGGNEW_1724913048964_Xz4Qozb.jpg&quot'
urllib.request.urlretrieve(url_video,'yizang.mp4')

3.请求对象的定制

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

# response=urllib.request.urlopen(url)
# 这样获得的数据不全,因为网站有反爬
# 所以需要请求对象的定制
headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'}
request=urllib.request.Request(url=url,headers=headers)

response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
print(content)

4.get请求的quote方法

import urllib.request
import urllib.parse

# url='https://www.baidu.com/s?wd=周杰伦'
# 直接这样会报错,因为周杰伦不是ascii码,需要解码
# 此时需要用到urllib.parse.quote('周杰伦')

name=urllib.parse.quote('周杰伦')
url='https://www.baidu.com/s?wd={}'.format(name)


headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'}
request=urllib.request.Request(url=url,headers=headers)

response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
print(content)

5.get请求的urlencode方法

import urllib.request
import urllib.parse

# url='https://www.baidu.com/s?wd=周杰伦&sex=男'
# 有多个文字的情况

data={'wd':'周杰伦','sex':'男'}
a=urllib.parse.urlencode(data)

url='https://www.baidu.com/s?wd={}'.format(a)


headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'}
request=urllib.request.Request(url=url,headers=headers)

response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
print(content)

6.post请求百度翻译

import urllib.request
import urllib.parse

# post请求百度翻译
url='https://fanyi.baidu.com/sug'

# post请求的参数 必须要进行编码
data={'kw':'spider'}
data=urllib.parse.urlencode(data).encode('utf-8')

headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'}

# post的请求的参数 是不会拼接在url后面的 而是需要放在请求对象定制的参数中
request=urllib.request.Request(url=url,data=data,headers=headers)

# 模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)

# 获取响应的数据
content=response.read().decode('utf-8')

#content是其实是json数据
print(content)

import json

obj=json.loads(content)
print(obj)

7.ahax的get请求豆瓣电影第一页

import urllib.request

url='https://movie.douban.com/j/chart/top_list?type=5&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/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
}

request=urllib.request.Request(url=url,headers=headers)

response=urllib.request.urlopen(request)

content=response.read().decode('utf-8')

import json
fp=open('douban.json','w',encoding='utf-8')
fp.write(content)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值