首页 / 爬虫 / 爬虫的两种解析方式 xpath和bs4
爬虫的两种解析方式 xpath和bs4
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了爬虫的两种解析方式 xpath和bs4,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4827字,纯文字阅读大概需要7分钟。
内容图文
1.xpath解析
from lxml import etree
两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点
(1)本地文件
tree = etree.parse(文件名) ===》保存的本地文件路径放入
(2)网络文件
tree = etree.HTML(网页字符串) ==》直接把得到的网页字符串作为参数传入
ret = tree.xpath(路径表达式)
【注】ret是一个列表,所以要用ret需要对之进行处理
- 安装xpath插件:可以在插件中直接执行xpath表达式
1.将xpath插件拖动到谷歌浏览器拓展程序(更多工具)中,安装成功
2.启动和关闭插件 ctrl + shift + x
常用的一些xpath表达式
1 /bookstore/book 选取根节点bookstore下面所有直接子节点book 2 //book 选取所有book 3 /bookstore//book 查找bookstore下面所有的book 4 /bookstore/book[1] bookstore里面的第一个book 5 /bookstore/book[last()] bookstore里面的最后一个book 6 /bookstore/book[position()<3] 前两个book 7 //title[@lang] 所有的带有lang属性的title节点 8 //title[@lang=‘eng‘] 所有的lang属性值为eng的title节点 9 属性定位 10 //li[@id="hua"] 11 //div[@class="song"] 12 层级定位&索引 13 //div[@id="head"]/div/div[2]/a[@class="toindex"] 14 【注】索引从1开始 15 //div[@id="head"]//a[@class="toindex"] 16 【注】双斜杠代表下面所有的a节点,不管位置 17 逻辑运算 18 //input[@class="s_ipt"and @name="wd"] 19 模糊匹配 : 20 contains 21 //input[contains(@class, "s_i")] 22 所有的input,有class属性,并且属性中带有s_i的节点 23 //input[contains(text(), "爱")] 24 starts-with 25 //input[starts-with(@class, "s")] 26 所有的input,有class属性,并且属性以s开头 27 取文本 28 //div[@id="u1"]/a[5]/text() 获取节点内容 29 //div[@id="u1"]//text() 获取节点里面不带标签的所有内容 30 取属性 31 //div[@id="u1"]/a[5]/@href
综合练习:获取好段子中的内容和作者
1 from lxml import etree 2import requests 3 4 url=‘http://www.haoduanzi.com/category-10_2.html‘ 5 headers = { 6‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36‘, 7 } 8 url_content=requests.get(url,headers=headers).text 9#使用xpath对url_conten进行解析10#使用xpath解析从网络上获取的数据11 tree=etree.HTML(url_content) 12#解析获取当页所有段子的标题13 title_list=tree.xpath(‘//div[@class="log cate10 auth1"]/h3/a/text()‘) 1415 ele_div_list=tree.xpath(‘//div[@class="log cate10 auth1"]‘) 1617 text_list=[] #最终会存储12个段子的文本内容18for ele in ele_div_list: 19#段子的文本内容(是存放在list列表中)20 text_list=ele.xpath(‘./div[@class="cont"]//text()‘) 21#list列表中的文本内容全部提取到一个字符串中22 text_str=str(text_list) 23#字符串形式的文本内容防止到all_text列表中24 text_list.append(text_str) 25print(title_list) 26print(text_list)
2.bs4解析
安装:
- 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
- windows
(1)打开文件资源管理器(文件夹地址栏中)
(2)地址栏上面输入 %appdata%
(3)在这里面新建一个文件夹 pip
(4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
- linux
(1)cd ~
(2)mkdir ~/.pip
(3)vi ~/.pip/pip.conf
(4)编辑内容,和windows一模一样
- 需要安装:pip install bs4
bs4在使用时候需要一个第三方库,把这个库也安装一下
pip install lxml
简单实用规则
1 - from bs4 import BeautifulSoup 2 - 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的内容 3 (1)转化本地文件: 4 - soup = BeautifulSoup(open(‘本地文件‘), ‘lxml‘) 5 (2)转化网络文件: 6 - soup = BeautifulSoup(‘字符串类型或者字节类型‘, ‘lxml‘) 7 (3)打印soup对象显示内容为html文件中的内容 8 (1)根据标签名查找 9 - soup.a 只能找到第一个符合要求的标签 10 (2)获取属性 11 - soup.a.attrs 获取a所有的属性和属性值,返回一个字典 12 - soup.a.attrs[‘href‘] 获取href属性 13 - soup.a[‘href‘] 也可简写为这种形式 14 (3)获取内容 15 - soup.a.string 16 - soup.a.text 17 - soup.a.get_text() 18 【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容 19 (4)find:找到第一个符合要求的标签 20 - soup.find(‘a‘) 找到第一个符合要求的 21 - soup.find(‘a‘, title="xxx") 22 - soup.find(‘a‘, alt="xxx") 23 - soup.find(‘a‘, class_="xxx") 24 - soup.find(‘a‘, id="xxx") 25 (5)find_all:找到所有符合要求的标签 26 - soup.find_all(‘a‘) 27 - soup.find_all([‘a‘,‘b‘]) 找到所有的a和b标签 28 - soup.find_all(‘a‘, limit=2) 限制前两个 29 (6)select:soup.select(‘#feng‘) 30 - 根据选择器选择指定的内容 31 - 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器32 - 层级选择器: 33 div .dudu #lala .meme .xixi 下面好多级34 div > p > a > .lala 只能是下面一级 35 【注意】select选择器返回永远是列表,需要通过下标提取指定的对象
- 综合练习:
需求:使用bs4实现将诗词名句网站中三国演义小说的每一章的内容爬去到本地磁盘进行存储
http://www.shicimingju.com/book/sanguoyanyi.html
1 # !/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import requests 4 from bs4 import BeautifulSoup 5 6 headers={ 7‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘, 8 } 9def parse_content(url): 10#获取标题正文页数据11 page_text = requests.get(url,headers=headers).text 12 soup = BeautifulSoup(page_text,‘lxml‘) 13#解析获得标签14 ele = soup.find(‘div‘,class_=‘chapter_content‘) 15 content = ele.text #获取标签中的数据值16return content 1718if__name__ == "__main__": 19 url = ‘http://www.shicimingju.com/book/sanguoyanyi.html‘20 reponse = requests.get(url=url,headers=headers) 21 page_text = reponse.text 2223#创建soup对象24 soup = BeautifulSoup(page_text,‘lxml‘) 25#解析数据26 a_eles = soup.select(‘.book-mulu > ul > li > a‘) 27print(a_eles) 28 cap = 1 29for ele in a_eles: 30print(‘开始下载第%d章节‘%cap) 31 cap+=1 32 title = ele.string 33 content_url = ‘http://www.shicimingju.com‘+ele[‘href‘] 34 content = parse_content(content_url) 3536 with open(‘./sanguo.txt‘,‘w‘) as fp: 37 fp.write(title+":"+content+‘\n\n\n\n\n‘) 38print(‘结束下载第%d章节‘%cap)
原文:https://www.cnblogs.com/Roc-Atlantis/p/9714457.html
内容总结
以上是互联网集市为您收集整理的爬虫的两种解析方式 xpath和bs4全部内容,希望文章能够帮你解决爬虫的两种解析方式 xpath和bs4所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。