第五周——爬虫入门 Day3 7.27

学习时间:9:00——11:00           16:00——19:00

模拟登录:
-爬取基于某些用户的用户信息。
-点击登录按钮之后会发起一个post请求
-post请求中会携带登录之前录入的相关的登录信息(用户名,密码,验证码......)(验证码:每次请求都会变化)

需求:爬取当前用户的相关的用户信息(个人主页中显示的用户信息)

http/https协议特性:无状态
没有请求到对应页面数据的原因:
发起的第二次基于个人主页页面请求的时候,服务器端并不知道该此请求是基于登录状态下的请求。

cookie:用来让服务器端记录客户端的相关状态
-手动处理:通过抓包工具获取cookie值,将该值封装到headers中

-自动处理:
   -cookie值的来源是哪里?
       -模拟登录post请求后,由服务器端创建。

session会话对象:
-作用:
  1.可以进行请求的发送。
   2.如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该session对象中
   

   -创建一个session对象:session = requests.Session()
   -使用session对象进行模拟登录post请求的发送(cookie就会被存储在session中)

   - session对象对个人主页对应的get请求进行发送(携带了cookie)

import requests
from lxml import etree
from chaojiying import Chaojiying_Client,get_code
import time
session = requests.Session()
header = {'User-Agent':
              'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36 Edg/101.0.1210.32'
          }
url = 'https://gushiwen.com/main/login.html'
page_text = requests.get(url=url,headers=header).text
tree = etree.HTML(page_text)
code_img_src = tree.xpath('//*[@id="main"]/div/div/form/div/ul/li[3]/img/@src')[0]
code_img_src = 'https://gushiwen.com' + code_img_src
time.sleep(1)
code_img_data = requests.get(url=code_img_src,headers=header).content
with open('./code.jpg','wb') as fp:
    fp.write(code_img_data)
result = get_code('code.jpg',4004)
print(result)

login_url = 'https://gushiwen.com/main/login.html'
data = {
'user': 'fancy',
'pass': 'fcy030730',
'imgvc': result,
}
response = session.post(url=login_url,headers=header,data=data)
print(response.status_code)
# login_page_text = response.text
# with open('./gushiwen.html','w',encoding='utf-8') as fp:
#     fp.write(login_page_text)

detail_url = 'https://gushiwen.com/u.html'
detail_page_text = session.get(url=detail_url,headers=header).text
with open('fancy.html','w',encoding='utf-8') as fp:
    fp.write(detail_page_text)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值