首页 > 编程语言 >自学Python爬虫笔记(day7)

自学Python爬虫笔记(day7)

时间:2023-04-15 16:44:19浏览次数:44  
标签:Python day7 22% 爬虫 url https ip requests resp

环境python3.9版本及以上,开发工具pycharm

 

requests的进阶使用:

案例一 模拟用户登录-处理cookie:

# 登录 -> 得到cookie
# 带着cookie 去请求到暑假url -> 书架上的内容

# 必须把上面两个操作连起来
# 我们可以使用session进行请求 -> session你可以认为是一连串的请求,在这个过程中的cookie不会丢失
import requests

# # 会话
# session = requests.session()
# data = {
#     "loginName": "18975575097",
#     "password": "hy.1211"
# }
#
# # 1.登录
# url = "https://passport.17k.com/ck/user/login"
# session.post(url, data=data)
# # print(resp.text)
# # print(resp.cookies)       # 看cookie
#
# # 拿书架上的数据
# # 刚使用的session中是有cookie的
# resp = session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
#
# print(resp.json())


# 暴力爬取!
resp = requests.get("https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919", headers = {
    "Cookie": "GUID=69519599-f002-43d3-a75d-629c3a6a99d9; sajssdk_2015_cross_new_user=1; __bid_n=187839078a08ad067b4207; Hm_lvt_9793f42b498361373512340937deb2a0=1681539496; FPTOKEN=qhSCogWrXfGuSVgVyrv5ugmyHMCk09hR09J4vwLe0ciErADRvtr5jcAk+9ZVtxemgBMe0YtpS/FNlGnyQjBBy86M33gU8fqmjxDEgV51pvABJY4f3EmMoOFVL1jVracFtg91N7m6HmRPjTrLYkYm40zgHeQF4inRorhmupWootM/w3CRy6ccjOjXZWnLmMIDuo7CFnjR8ooJNXNNLQmgNLl/Ft8AoPAjLi+uyKrFphfCrrcCw6WWZKp9AqXPkd/nE5z9VUSuebEcGOC8d8ZV0+JwhAOq5OupVvsqmC0AGKEVhfEO4rxrC7s2OkffXD3ZA472EdyMm1LDtupi42vNCu0t9zEOVz/6hbY3+CHJuf94fatzLwcqC9IrTL+UgoTLpvt5G/ozsAljI9p8EiC3NQ==|Q2G++K0W9yBUzbXcPpwV+HwjFl0HOP4N1PLWtwuBdOU=|10|f8d67ccba53f0bb3f3fdc404f8182129; c_channel=0; c_csc=web; BAIDU_SSP_lcr=https://api.weibo.com/; accessToken=avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F08%252F28%252F67%252F100156728.jpg-88x88%253Fv%253D1681540416000%26id%3D100156728%26nickname%3D%25E4%25B9%25A6%25E5%258F%258B6K7GZ6La3%26e%3D1697092533%26s%3D62ff98a0444d1c29; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100156728%22%2C%22%24device_id%22%3A%22187839078371431-02353e314bf148-26031b51-2073600-1878390783892a%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%A4%BE%E4%BA%A4%E7%BD%91%E7%AB%99%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fapi.weibo.com%2F%22%2C%22%24latest_referrer_host%22%3A%22api.weibo.com%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%2C%22first_id%22%3A%2269519599-f002-43d3-a75d-629c3a6a99d9%22%7D; Hm_lpvt_9793f42b498361373512340937deb2a0=1681540866"
})
print(resp.text)

案例二 防盗链的处理-爬取梨视频:

# 1.拿到contId
# 2.拿到videoStatus返回的json. -> srcURL
# 3.srcURL里面的内容进行修整、
# 4.下载视频
import requests

# 拉取视频的网址
url = "https://pearvideo.com/video_1721911"
contId = url.split('_')[1]

videoStatus = f"https://pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.12818526288984744"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
    # 防盗链:溯源,当前本次请求的上一级是谁
    "Referer": url
}

resp = requests.get(videoStatus, headers=headers)
dic = resp.json()
srcUrl = dic['videoInfo']['videos']['srcUrl']
systemTime = dic['systemTime']
srcUrl = srcUrl.replace(systemTime, f'cont-{contId}')
# print(srcUrl)

# 下载视频
with open("a.mp4", mode="wb") as f:
    f.write(requests.get(srcUrl).content)

案例三 代理:

# 代理,可以使用第三方的机器来代理你的请求
# 代理的弊端:
#   1.慢
#   2.代理ip不好找
import requests

# https://www.kuaidaili.com/free/intr/

url = "https://www.baidu.com"

# 准备代理信息
proxy = {
    "http": "http://114.233.70.231:9000",
    "https": "https://114.233.70.231:9000"
}

# proxies
resp = requests.get(url, proxies=proxy)
resp.encoding = "utf-8"
print(resp.text)

案例四 接入第三方代理:

import requests

# 程序有待完善,有可能代理ip弄完,我不知道!!
def get_ip():
    url = "……"
    resp = requests.get(url)
    ips = resp.json()
    for ip in ips['data']['proxy_list']:  # 拿到每一个ip
        yield ip  # 一个一个返回代理ip


def spider():
    url = "https://www.baidu.com"
    while 1:
        try:
            proxy_ip = next(gen)  # 拿到代理ip
            proxy = {
                "http": "http://" + proxy_ip,
                "https": "https://" + proxy_ip,
            }
            resp = requests.get(url, proxies=proxy)
            resp.encoding = 'utf-8'
            return resp.text
        except:
            print("报错了。")


if __name__ == "__main__":
    gen = get_ip()  # gen就是代理ip的生成器
    for i in range(10):
        spider()

 

OK,基础过完,还得好好夯实夯实,后面烧脑的来了!

标签:Python,day7,22%,爬虫,url,https,ip,requests,resp
From: https://www.cnblogs.com/Hyun79/p/17321388.html

相关文章

  • 保护爬虫隐私安全的HTTPS与Socks5技术
      作为一名网络工程师和网络文章主编,我经常收到读者和客户的咨询和反馈,其中有不少是关于代理IP的应用和如何保护爬虫的隐私安全的问题。在本文中,我将深入探讨代理IP、HTTPS、爬虫和Socks5的相关技术,并提供一些实用的建议和指导,希望能够帮助读者更好地理解和应用这些技术。一、......
  • 使用 Python 的 socket 库来实现一个简单的 Socket 示例
    以下是一个简单的服务器端和客户端的例子:服务器端:pythonimportsocket#创建socket对象serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#获取本地主机名host=socket.gethostname()#设置端口号port=9999#绑定端口号serversocket.bind((h......
  • python3正则-表达式
    1、介绍这里整理了表达式,即pattern参数的语法。其本质是一个str类型。2、开始和结尾(1)^^匹配字符串的开头(2)$$匹配字符串的末尾(3)整体匹配同时使用^和$3、匹配次数(1)贪婪匹配和非贪婪匹配模式贪婪匹配,在允许的范围内尽可能多的匹配表达式次数。比如*、+、{n,m}等......
  • python3正则-修饰符flags
    1、介绍在re模块的函数中,多数允许设置修饰符flags参数,其用于对匹配做优化和个性设置。2、修饰符修饰符实质上是int参数类型,可以直接指定int类型,也可以通过re调用变量名称指定。修饰符描述re.I使匹配对大小写不敏感re.L做本地化识别(locale-aware)匹配re.M多行......
  • python3正则-Match类
    1、介绍re.match、re.fullmatch和re.search这三个函数,如果存在匹配,其返回pattern初次匹配的结果,类型就为re.Match。2、类和初始化3、方法pattern="(ab)c"result=re.match(pattern=pattern,string="abcdef")print(result)(1)start获取pattern整体匹配的开始索引,返回类......
  • python3正则-编译和其他
    1、介绍将作为pattern参数的str类型,编译返回Pattern类型,方便后续调用,提高效率。re模块下存在多个函数,可以进行编译,返回类型是Pattern。Pattern类具有和re正则匹配函数类似的方法,当然在参数上略有不同,比如是将待匹配文本作为Pattern类的参数。2、compile函数pattern=re.comp......
  • python3时间
    1、介绍time模块是python的内部模块。2、函数#返回float类型,1670592065.0852547形式#print(time.time())#print(type(time.time()))#休眠,单位秒#time.sleep(5)#print(123)#返回int类型,1670592289035206400形式#print(time.time_ns())#print(type(time.time_......
  • python3正则-替换和切割函数
    1、介绍这里整理sub、subn和split三个函数的使用。2、sub函数sub(pattern,repl,string,count=0,flags=0)pattern,正则表达式repl,替换文本string,待处理字符串count,表示替换的最大次数。默认为0表示全部替换flags,标志,处理模式作用是在flags代表的模式下,匹配strings指......
  • python3正则-多匹配函数
    1、介绍这里介绍findall和finditer两个函数。2、findall函数findall(pattern,string,flags=0)pattern,正则表达式string,待处理字符串flags,标志,处理模式返回类型为list,如果不存在匹配,返回空列表[]。如果存在匹配,则返回全部匹配项,这里需要注意()的影响2.1无()importr......
  • Kali中切换到Python2.7 和 安装pip
    sudoupdate-alternatives--install/usr/bin/pythonpython/usr/bin/python21Kali是自带python2.7的,但是我的用正常的update-alternatives 没法切换,会报错,说找不到,可以替换的版本.使用上方命令就可以使用啦!!!OK啦!下面安装pip现在 /usr/bin下,创建一个文件夹,起......