re正则表达式 BeautifulSoup Xpath Selenium四者对比
| 方法 | 速度 | 易用性 | 使用条件 | 使用概述 |
|---|---|---|---|---|
| re正则表达式解析数据 | 快 | 复杂 | 熟悉re正则表达式语法 | requests请求获得html代码后,通过re正则字符串匹配获取数据,需要了解re所包含的相关方法,包括但不限re.compile,re.finditer,re.findall |
| BeautifulSoup定位及解析数据 | 较慢 | 简单 | 利用页面标签 属性进行定位 | 需要安装BeautifulSoup库并导入,requests请求获得html代码后,通过BeautifulSoup中的查找元素方法得到对应元素并获取数据。其中,通过id,class css等方式查找元素,需要在web页面查看元素的对应id,class等。 |
| lxml中的xpath技术进行定位及解析数据 | 较快 | 简单 | 是 | 安装lxml库,requests获取得到html代码后,通过lxml中的etree获取定位技术,定位对应元素,并通过内置text得到数据 |
| Selenium定位及解析数据 | 较慢 | 简单 | Selenium作为所见即所得的第三方web测试库,需要熟悉定位,事件等操作,尤其是xpath定位技术。 | ①安装Selenium库②下载ChromeDriver并加入到系统环境path变量中③下载Xpath Helper谷歌浏览器插件 |
总结:对于简单页面的数据爬取首选re正则表达式,BeautifulSoup作为补充;而一些页面会使用Ajax局部刷新技术,难以获取到数据的url地址时,考虑使用Selenium。
一 re正则表达式爬取青春有你3学员基本信息
import re
import requests
import datetime
def crawl_wiki_data():
url = "https://baike.baidu.com/item/%E9%9D%92%E6%98%A5%E6%9C%89%E4%BD%A0%E7%AC%AC%E4%BA%8C%E5%AD%A3?fromtitle=%E9%9D%92%E6%98%A5%E6%9C%89%E4%BD%A02&fromid=24266334"
headers ={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
" Chrome/92.0.4515.131 Safari/537.36"
}
try:
resp = requests.get(url=url,headers=headers)
print(resp.status_code)
resp_text = resp.text
print(resp.content.decode())
# re正则解析数据
obj = re.compile(r'(?P.*?)'
r' (?P.*?)'
r' (?P.*?)'
r' (?P.*?)',re.S)
result = obj.finditer(resp_text)
for item in result:
print(item.group('name'),end=' ')
print(item.group('where'),end=' ')
print(item.group('star'),end=' ')
print(item.group('flower'))
except Exception as e:
print(e)
if __name__ == '__main__':
crawl_wiki_data()
二 BeautifulSouo抓取微博热搜
import requests
from bs4 import BeautifulSoup
def main():
url = r"https://s.weibo.com/top/summary?cate=realtimehot"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
res = requests.get(url=url,headers=headers)
try:
if res.status_code:
print(res.status_code)
except Exception as e:
print(e)
print(res.content.decode(encoding="GBK", errors="ignore"))
soup = BeautifulSoup(res.text,'lxml')
tds = soup.find_all('td',class_='td-02')
print(len(tds))
for td in tds:
a = td.find_all('a')[0] #find_all返回的是列表
print(a.text)
if __name__ == '__main__':
main()
三 Selenium爬取豆瓣top-250及微博热搜榜
Selenium爬取豆瓣top-250
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome()
url = 'https://movie.douban.com/top250'
for num in range(10):
browser.get(url)
spans = browser.find_elements_by_xpath("//div[@class='hd']//span[@class='title'][last()-1]")
for span in spans:
print(span.text)
next_page = browser.find_element_by_xpath("//span[@class='next']")
ActionChains(browser).double_click(next_page).perform()
url =browser.current_url
Selenium爬取微博热搜
from selenium import webdriver
import time
browser = webdriver.Chrome()#实例化
url = 'https://s.weibo.com/top/summary'
browser.get(url)
browser.implicitly_wait(10)
res = browser.find_elements_by_xpath('//td[@]//a')
for it in res:
print(it.text)
Python相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置
木托盘
宝塔面板
儿童python教程
心情低落
朋友圈
vim
双一流学科
专升本
我的学校
日记学校
西点培训学校
汽修学校
情书
化妆学校
塔沟武校
异形模板
西南大学排名
最精辟人生短句
6步教你追回被骗的钱
南昌大学排名
清朝十二帝
北京印刷学院排名
北方工业大学排名
北京航空航天大学排名
首都经济贸易大学排名
中国传媒大学排名
首都师范大学排名
中国地质大学(北京)排名
北京信息科技大学排名
中央民族大学排名
北京舞蹈学院排名
北京电影学院排名
中国戏曲学院排名
河北政法职业学院排名
河北经贸大学排名
天津中德应用技术大学排名
天津医学高等专科学校排名
天津美术学院排名
天津音乐学院排名
天津工业大学排名
北京工业大学耿丹学院排名
北京警察学院排名
天津科技大学排名
北京邮电大学(宏福校区)排名
北京网络职业学院排名
北京大学医学部排名
河北科技大学排名
河北地质大学排名
河北体育学院排名



