当前位置:   article > 正文

Python爬虫学习之requests库

Python爬虫学习之requests库

 目录

一、requests的基本使用

二、get请求

三、post请求

四、代理的使用

五、cookie登录以及验证码图片识别


一、requests的基本使用

  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)

二、get请求

  1. import requests
  2. url = 'http://www.baidu.com/s?'
  3. headers = {
  4. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
  5. }
  6. data = {
  7. 'wd':'北京'
  8. }
  9. #url--请求资源地址 params--参数 kwargs--字典
  10. response = requests.get(url=url,params=data,headers=headers)
  11. content = response.text
  12. print(content)

注: 参数用params传递,参数不需要urlencode编码,不需要请求对象的定制。

三、post请求

  1. import requests
  2. post_url = 'https://fanyi.baidu.com/sug'
  3. headers = {
  4. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
  5. }
  6. data = {
  7. 'kw':'eye'
  8. }
  9. #url--请求对象地址 data--参数 kwargs--字典
  10. response = requests.post(url= post_url,data=data,headers=headers)
  11. content = response.text

解决乱码

  1. import json
  2. #注:这里是新版json,需要用encode('utf-8),不能用encoding='utf-8'
  3. obj = json.loads(content.encode('utf-8'))
  4. print(obj)

注:requests的post请求不需要编解码,post请求的参数是data,不需要请求对象的定制。

四、代理的使用

  1. proxy = {
  2. 'http':'101.251.204.174:8080'
  3. }
  4. response = requests.get(url=url,params=data,headers=headers,proxies=proxy)

五、cookie登录以及验证码图片识别

e.g.自动登录古诗文网站

  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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
  6. }
  7. #获取页面的源码
  8. response = requests.get(url=url,headers=headers)
  9. content = response.text
  10. #解析页面源码 获取__VIEWSTATE __VIEWSTATEGENERATOR
  11. from bs4 import BeautifulSoup
  12. soup = BeautifulSoup(content,'lxml')
  13. #隐藏域hidden
  14. #获取__VIEWSTATE
  15. viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
  16. #获取__VIEWTATEGENERATOR
  17. viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')
  18. #获取验证码图片
  19. code = soup.select('#imgCode')[0].attrs.get('src')
  20. code_url = 'https://so.gushiwen.cn'+code
  21. #requests里的session()
  22. #通过session的返回值,使请求变成一个对象
  23. session = requests.session()
  24. #验证码的url的内容
  25. response_code = session.get(code_url)
  26. #注意此时要使用二进制数据,因为我们要使用图片的下载
  27. content_code = response_code.content
  28. #wb的模式就是将二进制数据写入文件
  29. with open('code.png','wb') as fp:
  30. fp.write(content_code)
  31. #获取了验证码之后 下载到本地 然后观察验证码 观察之后 然后在控制台输入这个验证码
  32. real_code = input('请输入验证码:')
  33. #点击登录
  34. url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
  35. data_post = {
  36. '__VIEWSTATE':'',
  37. '__VIEWSTATEGENERATOR':'',
  38. 'from':'http://so.gushiwen.cn/user/collect.aspx',
  39. 'email':'1234567@qq.com',
  40. 'pwd':'123456',
  41. 'code':'',
  42. 'denglu':'登录'
  43. }
  44. response_post = session.post(url = url_post,headers=headers,data=data_post)
  45. content_post = response_post.text
  46. with open('gushiwen.html','w',encoding='utf-8') as fp:
  47. fp.write(content_post)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53180
推荐阅读
相关标签
  

闽ICP备14008679号