爬虫(requests库的使用)

Posted 曹军

tags:

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

一:知识点

1.安装requests库

  

 

2.Brautiful soup

  可以提供一些简单的,python式的函数来处理导航,搜索,修改分析树等功能。

  她是一个工具箱,通过解析文档为用户提供需要抓去的数据。

  自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。

  现在是使用Beautiful Soup4,不过现在已经被移植到BS4了,即导入需要导入bs4。

 

3.导入

  pip install beautifulsoup4

  

 

4.创建Beautiful Soup对象

  导入bs4库

    from bs4 import BeautifulSoup

  创建:

    soup=BeautifulSoup(html

 

5.程序

1 import requests
2 from bs4 import BeautifulSoup
3 r=requests.get("http://www.baidu.com",headers={\'User-Agent\':\'Mozilla/4.0\'})
4 soup=BeautifulSoup(r.text,"html.parser")
5 print soup.prettify()

 

6.打印soup的内容

  print soup.prettify()

 

7.四大对象种类

  Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,将所有的对象归纳为四种。

    BeautifulSoup

    Tag

    NavigableString

    Comment

 

8.BeautifulSoup

  对象表示是一个文档的全部内容,大部分的时候,可以将它当作Tag对象,是一个特殊的Tag,我们可以获取它的类型,名称,以及属性。

  soup.name

  soup.attrs

 

9.Tag的使用

  找到的是第一个,后面的都没显示。

  soup.title.name

  soup.title.attrs

  soup.meta[\'content\']

  soup.meta.get(\'content\')

1 import requests
2 from bs4 import BeautifulSoup
3 r=requests.get("http://www.baidu.com",headers={\'User-Agent\':\'Mozilla/4.0\'})
4 soup=BeautifulSoup(r.text,"html.parser")
5 print soup.title
6 print soup.meta

效果:

  <title>百度一下,你就知道</title>
  <meta content="text/html;charset=utf-8" http-equiv="content-type"/>

 

10.NavigableString

  获取标签内部的文字。

  soup.标签名.string

1 import requests
2 from bs4 import BeautifulSoup
3 r=requests.get("http://www.baidu.com",headers={\'User-Agent\':\'Mozilla/4.0\'})
4 soup=BeautifulSoup(r.text,"html.parser")
5 print soup.title.string

效果:

  百度一下,你就知道

 

11.Comment

  是一个特殊类型的NavigableString对象,其实输出的内容仍然不包含注释符号。

 

12.常用方法(过滤)

  name

  attrs

  text

  limit

  recursive:要不要搜索子孙节点。

  

13.常用方法

  find_all

  find

  .contents     .children

  .descendants

  .string

  .parent

  .next_sibling

  next_elements     .previous_elements

 

14.程序

1 import requests
2 from bs4 import BeautifulSoup
3 r=requests.get("http://www.baidu.com",headers={\'User-Agent\':\'Mozilla/4.0\'})
4 soup=BeautifulSoup(r.text,"html.parser")
5 print soup.script.parent
6 print soup.title.string

 

二:案例

1.网址

  https://movie.douban.com/top250?start=0&filter=

  

 

2.程序

 1 #encoding=utf-8
 2 import requests
 3 from bs4 import BeautifulSoup
 4 import re
 5 import xlwt
 6 
 7 #创建全局变量,保存电影信息
 8 dataList=[]
 9 
10 #根据地址和开始行获取网页的文本内容
11 def getHtmlTest(url,startRow):
12     #头部筛选函数
13     if(startRow==0):
14         param={}
15     else:
16         param={\'start\':startRow,\'filter\':\'\'}
17     #获取网页
18     r=requests.get(url,params=param,headers={\'User-Agent\':\'Mozilla/4.0\'})
19     return r.text
20 
21 #创建函数将传入的文本解析获取所需要的数据
22 def getData(html):
23     soup=BeautifulSoup(html,\'html.parser\')
24     #获取class为grid_view的ol下面的所有列表
25     movieList=soup.find(\'ol\',attrs={\'class\':\'grid_view\'})
26     #遍历查找内容
27     for movieLi in movieList.find_all(\'li\'):
28         data=[]
29         #获取电影名称
30         movieHd=movieLi.find(\'div\',attrs={\'class\':\'hd\'})
31         movieName=movieHd.find(\'span\',attrs={\'class\':\'title\'}).getText()
32         data.append(movieName)
33 
34         #电影分数
35         movieScore=movieLi.find(\'span\',attrs={\'class\':\'rating_num\'}).getText()
36         data.append(movieScore)
37 
38         #电影评价人数
39         movieEval=movieLi.find(\'div\',attrs={\'class\':\'star\'})
40         movieEvalNum=re.findall(r\'\\d+\',str(movieEval))[-1]
41         data.append(movieEvalNum)
42 
43         #电影评价
44         movieQuote=movieLi.find(\'span\',attrs={\'class\',\'inq\'})
45         if(movieQuote):
46             data.append(movieQuote.getText())
47         else:
48             data.append("无影评信息")
49 
50         #添加到全局变量中
51         dataList.append(data)
52     return
53 
54 #保存到excel
55 def saveData(savePath):
56     book=xlwt.Workbook(encoding=\'utf-8\')
57     sheet=book.add_sheet(\'前250名的电影信息\')
58     col=(u\'电影名称\',u\'电影评分\',u\'评论人数\',u\'短评\')
59     for i in range(0,4):
60         sheet.write(0,i,col[i])
61     for i in range(0,250):
62         data=dataList[i]
63         for j in range(0,4):
64             sheet.write(i+1,j,data[j])
65     book.save(savePath)
66     return
67 
68 #创建主函数
69 def mainFunc():
70     url=\'https://movie.douban.com/top250\'
71     startRow=0
72     while startRow<250:
73         html=getHtmlTest(url,startRow)
74         getData(html)
75         startRow += 25
76     saveData(\'movieData.xls\')
77     return
78 
79 #测试
80 mainFunc()

 

3.效果

  

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·

 

以上是关于爬虫(requests库的使用)的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫---requests库的用法

python爬虫---requests库的用法

爬虫(requests库的使用)

Python爬虫:urllib库的基本使用

python爬虫之 Requests库的基本使用

全方面的掌握Requests库的使用【python爬虫入门进阶】(02)