定制开发小程序Python爬虫详解(一看就懂)

定制开发小程序爬虫是什么

定制开发小程序爬虫简单的来说就是用定制开发小程序程序获取网络上数据这定制开发小程序个过程的一种名称。

定制开发小程序爬虫的原理

定制开发小程序如果要获取网络上数据,定制开发小程序我们要给爬虫一个网址(定制开发小程序程序中通常叫URL),定制开发小程序爬虫发送一个HTTP定制开发小程序请求给目标网页的服务器,定制开发小程序服务器返回数据给客户端(也就是我们的爬虫),爬虫再进行数据解析、保存等一系列操作。

流程

爬虫可以节省我们的时间,比如我要获取豆瓣电影 Top250 榜单,如果不用爬虫,我们要先在浏览器上输入豆瓣电影的 URL ,客户端(浏览器)通过解析查到豆瓣电影网页的服务器的 IP 地址,然后与它建立连接,浏览器再创造一个 HTTP 请求发送给豆瓣电影的服务器,服务器收到请求之后,把 Top250 榜单从数据库中提出,封装成一个 HTTP 响应,然后将响应结果返回给浏览器,浏览器显示响应内容,我们看到数据。我们的爬虫也是根据这个流程,只不过改成了代码形式。

HTTP请求

HTTP 请求由请求行、请求头、空行、请求体组成。

请求行由三部分组成:

        1.请求方法,常见的请求方法有 GET、POST、PUT、DELETE、HEAD
        2.客户端要获取的资源路径
        3.是客户端使用的 HTTP 协议版本号
请求头是客户端向服务器发送请求的补充说明,比如说明访问者身份,这个下面会讲到。

请求体是客户端向服务器提交的数据,比如用户登录时需要提高的账号密码信息。请求头与请求体之间用空行隔开。请求体并不是所有的请求都有的,比如一般的GET都不会带有请求体。

上图就是浏览器登录豆瓣时向服务器发送的HTTP POST 请求,请求体中指定了用户名和密码。

HTTP 响应

HTTP 响应格式与请求的格式很相似,也是由响应行、响应头、空行、响应体组成。

响应行也包含三部分,分别是服务端的 HTTP 版本号、响应状态码和状态说明。

这里状态码有一张表,对应了各个状态码的意思

 

 第二部分就是响应头,响应头与请求头对应,是服务器对该响应的一些附加说明,比如响应内容的格式是什么,响应内容的长度有多少、什么时间返回给客户端的、甚至还有一些 Cookie 信息也会放在响应头里面。

第三部分是响应体,它才是真正的响应数据,这些数据其实就是网页的 HTML 源代码。

爬虫代码怎么写

爬虫可以用很多语言比如 Python、C++等等,但是我觉得Python是最简单的,

因为Python有现成可用的库,已经封装到几乎完美,

C++虽然也有现成的库,但是它的爬虫还是比较小众,仅有的库也不足以算上简单,而且代码在各个编译器上,甚至同一个编译器上不同版本的兼容性不强,所以不是特别好用。所以今天主要介绍python爬虫。

安装requests库

cmd运行:pip install requests ,安装 requests。

然后在 IDLE 或者编译器(个人推荐 VS Code 或者 Pycharm )上输入

import requests 运行,如果没有报错,证明安装成功。

安装大部分库的方法都是:pip install xxx(库的名字)

requests的方法   

requests.request() 构造一个请求,支撑一下各方法的基本方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET

requests.head()

获取HTML网页头信息的方法,对应于HTTP的HEAD

requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put()  向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch( )  向HTML网页提交局部修改请求,对应于HTTP的PATCT
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE

最常用的get方法

r = requests.get(url)

包括两个重要的对象:

构造一个向服务器请求资源的Request对象;返回一个包含服务器资源的Response对象

r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败
r.textHTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding  从HTTP header中猜测的响应内容编码方式(如果header中不存在charset,则认为编码为ISO-8859-1)
r.apparent_encoding从内容中分析的响应内容编码方式(备选编码方式)
r.contentHTTP响应内容的二进制形式
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPErrorHTTP错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产生超时异常

爬虫小demo

requests是最基础的爬虫库,但是我们可以做一个简单的翻译

我先把我做的一个爬虫的小项目的项目结构放上,完整源码可以私聊我下载。

下面是翻译部分的源码 

  1. import requests
  2. def English_Chinese():
  3. url = "https://fanyi.baidu.com/sug"
  4. s = input("请输入要翻译的词(中/英):")
  5. dat = {
  6. "kw":s
  7. }
  8. resp = requests.post(url,data = dat)# 发送post请求
  9. ch = resp.json() # 将服务器返回的内容直接处理成json => dict
  10. resp.close()
  11. dic_lenth = len(ch['data'])
  12. for i in range(dic_lenth):
  13. print("词:"+ch['data'][i]['k']+" "+"单词意思:"+ch['data'][i]['v'])

代码详解:

导入requests模块,设置 url为百度翻译网页的网址。

 然后通过 post 方法发送请求,再把返回的结果打成一个 dic (字典),但是这个时候我们打印出来结果发现是这样的。

 这是一个字典里套列表套字典的样子,大概就是这样的

{ xx:xx , xx:[ {xx:xx} , {xx:xx} , {xx:xx} , {xx:xx} ] }

我标红的地方是我们需要的信息。

假如说我标蓝色的列表里面有 n 个字典,我们可以通过 len() 函数获取 n 的数值,

并使用 for 循环遍历,得到结果。

  1. dic_lenth = len(ch['data']
  2. for i in range(dic_lenth):
  3. print("词:"+ch['data'][i]['k']+" "+"单词意思:"+ch['data'][i]['v'])

最后

好了,今天的分享就到这里了,拜拜~

哎?忘了一件事,再给你们一个爬取天气的代码!

  1. # -*- coding:utf-8 -*-
  2. import requests
  3. import bs4
  4. def get_web(url):
  5. header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59"}
  6. res = requests.get(url, headers=header, timeout=5)
  7. # print(res.encoding)
  8. content = res.text.encode('ISO-8859-1')
  9. return content
  10. def parse_content(content):
  11. soup = bs4.BeautifulSoup(content, 'lxml')
  12. '''
  13. 存放天气情况
  14. '''
  15. list_weather = []
  16. weather_list = soup.find_all('p', class_='wea')
  17. for i in weather_list:
  18. list_weather.append(i.text)
  19. '''
  20. 存放日期
  21. '''
  22. list_day = []
  23. i = 0
  24. day_list = soup.find_all('h1')
  25. for each in day_list:
  26. if i <= 6:
  27. list_day.append(each.text.strip())
  28. i += 1
  29. # print(list_day)
  30. '''
  31. 存放温度:最高温度和最低温度
  32. '''
  33. tem_list = soup.find_all('p', class_='tem')
  34. i = 0
  35. list_tem = []
  36. for each in tem_list:
  37. if i == 0:
  38. list_tem.append(each.i.text)
  39. i += 1
  40. elif i > 0:
  41. list_tem.append([each.span.text, each.i.text])
  42. i += 1
  43. # print(list_tem)
  44. '''
  45. 存放风力
  46. '''
  47. list_wind = []
  48. wind_list = soup.find_all('p', class_='win')
  49. for each in wind_list:
  50. list_wind.append(each.i.text.strip())
  51. # print(list_wind)
  52. return list_day, list_weather, list_tem, list_wind
  53. def get_content(url):
  54. content = get_web(url)
  55. day, weather, tem, wind = parse_content(content)
  56. item = 0
  57. for i in range(0, 7):
  58. if item == 0:
  59. print(day[i]+':\t')
  60. print(weather[i]+'\t')
  61. print("今日气温:"+tem[i]+'\t')
  62. print("风力:"+wind[i]+'\t')
  63. print('')
  64. item += 1
  65. elif item > 0:
  66. print(day[i]+':\t')
  67. print(weather[i] + '\t')
  68. print("最高气温:"+tem[i][0]+'\t')
  69. print("最低气温:"+tem[i][1] + '\t')
  70. print("风力:"+wind[i]+'\t')
  71. print('')

好了,这下是真的拜拜了,明天见~

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发