爬虫 requests——获取网络请求(九)

目录

一、requests安装

二、response的属性及类型

三、requests的get请求

四、requests的post请求——百度翻译

五、代理

六、cookie登录——古诗文网

七、打码平台

参考


一、requests安装

pip install requests

二、response的属性及类型

response的一个类型和六个属性

        类型:models.Response
        r.text:获取网站源码
        r.encoding:访问或定制编码方式

        r.url:获取请求的url
        r.content:响应的字节类型
        r.status code:响应的状态码
        r.headers:响应的头信息

import requests

url = 'http://www.baidu.com'

response = requests.get(url)

# 一个类型和六个属性
print(type(response))   # <class 'requests.models.Response'>

# 设置相应的编码格式
response.encoding = 'utf-8'

# 以字符串的形式返回网页的源码
print(response.text)

# 返回url地址
print(response.url)

# 返回的是二进制的数据
print(response.content)

# 返回响应的状态码
print(response.status_code)

# 返回响应头
print(response.headers)

三、requests的get请求

import requests

url = 'https://ww.baidu.com/s?'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}

data = {
    'wd':'北京'
}

# url:请求资源路径
# params:参数
# kwargs:字典
response = requests.get(url=url,params=data,headers=headers)

content = response.text

print(content)

# 总结
# 1.参数使用params传递
# 2.参数不需要urlencode编码
# 3.不需要请求对象的定制
# 4.请求资源中的 '?' 可以加,也可以不加

四、requests的post请求——百度翻译

import requests

url = 'https://fanyi.baidu.com/sug'

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

data = {
    'kw':'spider'
}

# url:请求地址
# data:请求参数
# kwargs:字典
response = requests.post(url, data, headers)

content = response.text

# print(content)

import json

obj = json.loads(content,encoding='utf-8')
print(obj)

# 总结
# 1.post请求不要编解码
# 2.post请求的参数是data
# 3.不需要请求对象的定制

五、代理

import requests

url = 'http://www.baidu.com/s?'


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

data = {
    'wd':'ip'
}

proxy = {
    'http':'183.236.123.242:8060'
}

response = requests.get(url=url, params=data, headers=headers, proxies=proxy)

content = response.text

with open('peoxy.html', 'w', encoding='utf-8') as file:
    file.write(content)

六、cookie登录——古诗文网

# 总结
# 难点
# 1. 隐藏域问题
# 2. 验证码

抓登录界面的接口:登录界面,输入错的信息点击登录。找到以“login”开头的名称,可以看到登录界面的参数。

data_post={
    '__VIEWSTATE': __viewstate,
    '__VIEWSTATEGENERATOR': __viewsategenerator,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': 'your_emile',
    'pwd': 'your_pwd',
    'code': code_name,
    'denglu': '登录'
}

 在源代码中找到这两个变量,这两个变量被称为隐藏域

import requests
# 登录页面的url地址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'

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

# 获取网页源码
response = requests.get(url=url, headers=headers)
content = response.text

# 解析源码,获取值
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,'lxml')
__viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
__viewsategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

# print(__viewstate)
# print(__viewsategenerator)

抓取登录接口的,发送post请求

url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'

data_post={
    '__VIEWSTATE': __viewstate,
    '__VIEWSTATEGENERATOR': __viewsategenerator,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': 'your_emile',
    'pwd': 'your_pwd',
    'code': code_name,
    'denglu': '登录'
}

# response_post = requests.post(url=url, data=data_post, headers=headers)
# 使用session获取请求,就不能使用requests了
response_post = session.post(url=url, data=data_post, headers=headers)
content_post = response_post.text

with open('_088_gushi.html', 'w', encoding='utf-8') as file:
    file.write(content_post)

完整代码:

import requests

# 通过登录进入到主页面

# 通过登录接口我们发现,登录的时候需要的参数很多
# __VIEWSTATE: oVOa6GiRPyw/uXYlfbHShATrZDLYLwZCnEB1vZHb7b/sju65RzfnfkQpOUhAzSd2JgoDcceJlxAAoR9i9P7V8IAeapG992+yipGxh8poR0BnkU6xz0w27OTTkVtOcUG6D+X9W2mUeHZxTGdXwbCB9OVUZjA=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: your_emile
# pwd: hkhlgjkn
# code: gchb
# denglu: 登录

# 我们观察到 __VIEWSTATE , __VIEWSTATEGENERATOR , code 是一个变化的量

# 难点:(1) __VIEWSTATE , __VIEWSTATEGENERATOR   # 一般情况下,看不见的数据都是在页面的源码中
#     我们观察到这两个数据在页面的源码中,所以我们需要获取页面的源码,然后进行解析、赋值就可以了
#     (2)  验证码

import requests
# 登录页面的url地址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'

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

# 获取网页源码
response = requests.get(url=url, headers=headers)
content = response.text

# 解析源码,获取值
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,'lxml')
__viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
__viewsategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

# print(__viewstate)
# print(__viewsategenerator)

# 获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code
# print(code_url)

# urlretrieve 下载图片有坑 这里下载了图片,下次post请求验证码被刷新
import urllib.request
# urllib.request.urlretrieve(url=code_url, filename='_088_code.jpg')

# requests有个方法 session(),通过session的返回值,就能使请求变成一个对象
session = requests.session()
# 验证码url的内容
response_code = session.get(code_url)
# 注意,此时要使用二进制数据,因为我们要使用的是图片的下载
content_code = response_code.content
# 写二进制数据
with open('_088_code.png', 'wb') as file:
    file.write(content_code)


# 获取了验证码的图片之后,下载到本地,然后观察验证码,并将这个值赋给 ’code‘
code_name = input('input code')

# 点击登录
url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'

data_post={
    '__VIEWSTATE': __viewstate,
    '__VIEWSTATEGENERATOR': __viewsategenerator,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': 'your_emile',
    'pwd': 'your_pwd',
    'code': code_name,
    'denglu': '登录'
}

# response_post = requests.post(url=url, data=data_post, headers=headers)
# 使用session获取请求,就不能使用requests了
response_post = session.post(url=url, data=data_post, headers=headers)
content_post = response_post.text

with open('_088_gushi.html', 'w', encoding='utf-8') as file:
    file.write(content_post)


# 总结
# 难点
# 1. 隐藏域问题
# 2. 验证码

七、打码平台

打码平台可以自动识别验证码,如:超级鹰打码平台

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Billie使劲学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值