我们在网页爬取的过程中,会通过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代码的解析能够获取到我们想要的完整信息,然后我们通过对解析结果的分析能够获取到我们需要的接口路径,当我们获得这些接口的完整路径的时候,我们就可以通过这些路径进行下一步的操作了。