第一个爬虫和设计

Posted wawaer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一个爬虫和设计相关的知识,希望对你有一定的参考价值。

一、网络爬虫

  网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

网络爬虫应用一般分为两个步骤:

  1.  通过网络链接获取网页内容;

  2.  对获得的网页内容进行处理;

这两个步骤分别使用不同的函数库:requests 和 beautifulsoup4 。

采用pip指令安装 requests 库:打开命令行窗口 → 输入cmd → 输入 pip install requests 

( besutifulsoup4 库的安装也是类似的,此处不再赘述)

  •    Requests 库

    1.  Requests 库的7个方法

方法

说明

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的PATCH

requests.delete()

向HTML页面提交删除请求,对应于HTTP的DELETE

 

    2.   Response对象的属性

属性

说明

r.status_code

HTTP请求的返回状态,200表示连接成功,404表示失败

r.text

HTTP响应内容的字符串形式,即,url对应的页面内容

r.encoding

从HTTP header中猜测的响应内容编码方式

r. apparent_encoding

从内容中分析出的响应内容编码方式(备选编码方式)

r.content

HTTP响应内容的二进制形式

 

    3.  理解 Requests 库的异常

属性

说明

r.status_code

HTTP请求的返回状态,200表示连接成功,404表示失败

r.text

HTTP响应内容的字符串形式,即,url对应的页面内容

r.encoding

从HTTP header中猜测的响应内容编码方式

r. apparent_encoding

从内容中分析出的响应内容编码方式(备选编码方式)

r.content

HTTP响应内容的二进制形式

r.raise_for_status()

如果不是200,产生异常 requests.HTTPError

 

二、用 requests 库访问搜狗主页 

函数说明:

函数名称 函数功能
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
r.status_code HTTP请求的返回状态,200表示连接成功,404表示连接失败
r.encoding 从HTTP header中猜测的响应内容编码方式
r.text HTTP响应内容的字符串形式,即,url对应的页面内容
r.content HTTP响应内容的二进制形式
len() 计算文本长度
1 import requests
2 for i in range(20):
3     r = requests.get("https://www.sogou.com")#搜狗主页
4     print("网页返回状态:{}".format(r.status_code))
5 print("text内容为:{}".format(r.text))
6 print("\n")
7 print("text内容长度为:{}".format(len(r.text)))
8 print("content内容长度为:{}".format(len(r.content)))

二:爬取大学排名

 1 import requests
 2 from bs4 import BeautifulSoup
 3 allUniv = []
 4 def getHTMLText(url):
 5     try:
 6         r = requests.get(url, timeout=30)
 7         r.raise_for_status()
 8         r.encoding = utf-8
 9         return r.text
10     except:
11         return ""
12 def fillUnivList(soup):
13     data = soup.find_all(tr)
14     for tr in data:
15         ltd = tr.find_all(td)
16         if len(ltd)==0:
17             continue
18         singleUniv = []
19         for td in ltd:
20             singleUniv.append(td.string)
21         allUniv.append(singleUniv)
22 def printUnivList(num):
23     print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","学校名称","省市","总分","培养规模"))
24     for i in range(num):
25         u=allUniv[i]
26         print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(u[0],u[1],u[2],u[3],u[6]))
27 def main():
28     url = http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html
29     html = getHTMLText(url)
30     soup = BeautifulSoup(html, "html.parser")
31     fillUnivList(soup)
32     printUnivList(10)
33 main()

 

以上是关于第一个爬虫和设计的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

scrapy主动退出爬虫的代码片段(python3)

8. 爬虫训练场,第一个爬虫目标页设计,单页爬虫案例

浅谈网络爬虫中深度优先算法和简单代码实现

系统进阶学习python,爬虫,网页设计,正则表达式(附源代码)

如何更改谷歌地图标记上方的标题和片段设计