• python爬虫—requests


    一、安装

    pip install requests

    二、基本使用

    1、基本使用

    类型 : models.Response
    r.text : 获取网站源码
    r.encoding :访问或定制编码方式
    r.url :获取请求的 url
    r.content :响应的字节类型
    r.status_code :响应的状态码
    r.headers :响应的头信息

    1. import requests
    2. url = 'http://www.baidu.com'
    3. response = requests.get(url=url)
    4. # 一个类型 六个属性
    5. # Response 类型
    6. print(type(response))
    7. # 设置响应的编码格式
    8. response.encoding = 'utf-8'
    9. # 以字符串形式返回网页源码
    10. print(response.text)
    11. # 返回url地址
    12. print(response.url)
    13. # 返回的是二进制的数据
    14. print(response.content)
    15. # 返回响应的状态码
    16. print(response.status_code)
    17. # 返回的是响应头
    18. print(response.headers)

    2、与urllib区别

    1. # urllib
    2. # (1) 一个类型以及六个方法
    3. # (2)get请求
    4. # (3)post请求 百度翻译
    5. # (4)ajax的get请求
    6. # (5)ajax的post请求
    7. # (6)cookie登陆 微博
    8. # (7)代理
    9. # requests
    10. # (1)一个类型以及六个属性
    11. # (2)get请求
    12. # (3)post请求
    13. # (4)代理
    14. # (5)cookie 验证码
    15. import requests
    16. url = 'https://www.baidu.com/s'
    17. headers = {
    18. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    19. }
    20. data = {
    21. 'wd':'北京'
    22. }
    23. ############################### GET ##########################
    24. # url 请求资源路径
    25. # params 参数
    26. # kwargs 字典
    27. response = requests.get(url=url,params=data,headers=headers)
    28. content = response.text
    29. print(content)
    30. # 总结:
    31. # (1)参数使用params传递
    32. # (2)参数无需urlencode编码
    33. # (3)不需要请求对象的定制
    34. # (4)请求资源路径中的?可以加也可以不加
    35. ############################# POST ##########################
    36. # url 请求地址
    37. # data 请求参数
    38. # kwargs 字典
    39. response = requests.post(url=url,data=data,headers=headers)
    40. content =response.text
    41. import json
    42. obj = json.loads(content,encoding='utf-8')
    43. print(obj)
    44. # 总结:
    45. # (1)post请求 是不需要编解码
    46. # (2)post请求的参数是data
    47. # (3)不需要请求对象的定制

     

    三、代理

    1. import requests
    2. url = 'http://www.baidu.com/s?'
    3. headers = {
    4. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    5. }
    6. data = {
    7. 'wd' : 'ip'
    8. }
    9. proxy = {
    10. 'http':'120.194.55.139:6969'
    11. }
    12. response = requests.get(url=url,params=data,headers=headers,proxies=proxy)
    13. content = response.text
    14. with open('daili.html','w',encoding='utf-8')as fp:
    15. fp.write(content)

    四、cookie定制(破解验证码)

    找登录接口

     找参数的值

    python代码

    1. import requests
    2. # 登录页面的url地址
    3. url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    4. headers = {
    5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    6. }
    7. # 获取页面的源码
    8. response = requests.get(url=url,headers=headers)
    9. content = response.text
    10. # 解析页面源码 获取__VIEWSTATE __VIEWSTATEGENERATOR 这里使用bs4解析
    11. from bs4 import BeautifulSoup
    12. soup = BeautifulSoup(content,'lxml')
    13. # 获取__VIEWSTATE
    14. viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
    15. # 获取__VIEWSTATEGENERATOR
    16. viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')
    17. # 接下来处理验证码
    18. # 获取验证码图片
    19. code = soup.select('#imgCode')[0].attrs.get('src')
    20. code_url = 'https://so.gushiwen.cn' + code
    21. # 下载验证码图片
    22. # import urllib.request
    23. # urllib.request.urlretrieve(url=code_url,filename='code.jpg')
    24. # 使用上面方法下载验证码后会使验证码更新,从而使的每次都会提醒验证码错误
    25. # requests里面有个方法session() 通过session的返回值就能使请求变为一个对象
    26. session = requests.session()
    27. # 验证码的url地址
    28. response_code = session.get(code_url)
    29. # 注意此时要使用二进制的数据 因为我们要是用的是图片的下载
    30. content_code = response_code.content
    31. # wb的模式就是将二进制的数据写到文件
    32. with open('code.jpg','wb')as fp:
    33. fp.write(content_code)
    34. # 获取了验证码的图片之后 下载到本地 然后观察验证码 然后在控制台输入这个验证码 就可以将这个值给code的参数
    35. code_name = input('请输入你的验证码:')
    36. # 点击登录
    37. url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
    38. data_post = {
    39. '__VIEWSTATE': viewstate,
    40. '__VIEWSTATEGENERATOR': viewstategenerator,
    41. 'from': 'http://so.gushiwen.cn/user/collect.aspx',
    42. 'email': '自己账号',
    43. 'pwd': '自己密码',
    44. 'code': code_name,
    45. 'denglu': '登录'
    46. }
    47. response_post = session.post(url=url_post,headers=headers,data=data_post)
    48. content_post = response_post.text
    49. with open('gushiwen.html','w',encoding='utf-8')as fp:
    50. fp.write(content_post)

     五、破解验证码——超级鹰(公司级别)

    登录超级鹰官网:超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大

    若之前没有注册,则需要注册新的用户,并且进行充值。

     进入 用户中心 后点击 开发文档

    选择袭击使用的语言案例。

     下载好压缩包解压,并且把一下两个文件在pycharm中打开。

      代码中修改如下四处地方。

    软件ID的获取方法如下:

    进入用户中心  --> 软件id  -->  生成软件ID --> 复制软件id到代码中

     到此,运行代码就可以自动识别图片中的验证码了。 

  • 相关阅读:
    Darty自养号测评下单支付方式和注册账号手法有哪些要求?
    轻量级RPC分布式网络通信框架设计——服务配置中心zookeeper解析
    个人杂项总结
    世上最全NVDIA GPU参数列表: 3090,4090, A40, A30,V100, A100, A800性能参数
    ES6-扩展运算符“...“
    清华大学YOLOv10公版目标检测算法在地平线Bayes架构神经网络加速单元BPU上部署参考—— 以RDK Ultra为例
    双十一蓝牙耳机推荐哪款?发烧友推荐目前最值得入手的蓝牙耳机
    运行软件提示丢失msvcr120.dll文件怎么办?msvcr120.dll丢失的5个最新解决方法
    springMVC 导出Excel ,并提供下载(处理日期格式问题)
    docker 是什么
  • 原文地址:https://blog.csdn.net/qq_62594984/article/details/132628628