Beautifulsoup网页解析——爬取豆瓣排行榜分类接口

  我们在网页爬取的过程中,会通过requests成功的获取到所需要的信息,而且,在返回的网页信息中,也是通过HTML代码的形式进行展示的。HTML代码都是通过固定的标签组合来实现页面信息的展示,所以,最方便的做法就是依据标签来获取信息,所以我们提取信息也应该通过选择标签信息来获取我们需要的内容。

  python的spider中提供了许多的网页解析的第三方库,而对于HTML的解析(也就是我们通常说的通过css选择器进行解析),bs4中的Beautifulsoup是很好的选择。

  下面的代码实现了Beautifulsoup的基本实现方式

 1 '''
 2 @Description: Beautifulsoup网页解析(获取豆瓣电影分类排行榜)
 3 @Version: 1.0
 4 @Autor: Montoin Yan
 5 @Date: 2020-02-06 19:36:54
 6 @LastEditors  : Montoin Yan
 7 @LastEditTime : 2020-02-06 20:09:09
 8 '''
 9 
10 import requests
11 import re
12 import lxml
13 import random
14 import bs4
15 
16 Base_URL = 'http://movie.douban.com' #设置网页的根路径
17 CHART_URL = '{}/{}'.format(Base_URL,'chart') #拼接为网页的入口地址
18 
19 def main(): #主函数
20     #设置多个请求头,防止被反扒措施进行拦截
21     ua_list = [
22         "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
23         "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
24         "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
25         "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
26     ]
27     #随机pick one
28     ua = random.choice(ua_list)
29     response = requests.get(CHART_URL,headers={
30         'User-agent':ua
31     })
32     response.encoding = 'UTF-8' #设置获取网页的编码
33     # print(response.text)
34     soup = bs4.BeautifulSoup(markup=response.text,features='lxml') #使用lxml进行解析处理,使用头两个参数,markup:表示需要解析的内容  features:表示进行解析的特定解析器或者标记的类型
35     typerank_list = soup.find_all('a',href = re.compile('^/typerank')) #获取豆瓣a标签下所有的href属性为typerank的内容(通过正则)
36     for t in typerank_list:
37         type_title = t.contents[0] #获取文字的分类标题
38         print('【%s】访问路径:%s' % (type_title,Base_URL+t['href'])) #将获取到的数据进行拼接
39 
40 
41 if __name__ == "__main__":
42     main()

  执行的结果可以试一下情形:

   可以知道我们通过程序入口进行了对HTML代码的解析能够获取到我们想要的完整信息,然后我们通过对解析结果的分析能够获取到我们需要的接口路径,当我们获得这些接口的完整路径的时候,我们就可以通过这些路径进行下一步的操作了。

原文地址:https://www.cnblogs.com/yandashan666/p/12270283.html