当前位置: 首页 > news >正文

Selenium获取百度百科旅游景点的InfoBox消息盒

 前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(InfoBox),这也是毕业设计实体对齐和属性的对齐的语料库前期准备工作。希望文章对你有所帮助~

源代码

# coding=utf-8    
"""  
Created on 2015-09-04 @author: Eastmount   
"""    import time            
import re            
import os    
import sys  
import codecs  
from selenium import webdriver        
from selenium.webdriver.common.keys import Keys        
import selenium.webdriver.support.ui as ui        
from selenium.webdriver.common.action_chains import ActionChains    #Open PhantomJS    
driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")    
#driver = webdriver.Firefox()    
wait = ui.WebDriverWait(driver,10)  
global info #全局变量  #Get the infobox of 5A tourist spots    
def getInfobox(name):    try:    #create paths and txt files  global info  basePathDirectory = "Tourist_spots_5A"    if not os.path.exists(basePathDirectory):    os.makedirs(basePathDirectory)    baiduFile = os.path.join(basePathDirectory,"BaiduSpider.txt")    if not os.path.exists(baiduFile):    info = codecs.open(baiduFile,'w','utf-8')    else:    info = codecs.open(baiduFile,'a','utf-8')    #locate input  notice: 1.visit url by unicode 2.write files    print name.rstrip('\n') #delete char '\n'    driver.get("http://baike.baidu.com/")    elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input")    elem_inp.send_keys(name)    elem_inp.send_keys(Keys.RETURN)    info.write(name.rstrip('\n')+'\r\n')  #codecs不支持'\n'换行  time.sleep(2)  print driver.current_url  print driver.title  #load infobox basic-info cmn-clearfix  elem_name = driver.find_elements_by_xpath("//div[@class='basic-info cmn-clearfix']/dl/dt")    elem_value = driver.find_elements_by_xpath("//div[@class='basic-info cmn-clearfix']/dl/dd")  for e in elem_name:  print e.text  for e in elem_value:  print e.text  #create dictionary key-value  #字典是一种散列表结构,数据输入后按特征被散列,不记录原来的数据,顺序建议元组  elem_dic = dict(zip(elem_name,elem_value))   for key in elem_dic:    print key.text,elem_dic[key].text    info.writelines(key.text+" "+elem_dic[key].text+'\r\n')    time.sleep(5)    except Exception,e: #'utf8' codec can't decode byte    print "Error: ",e    finally:    print '\n'    info.write('\r\n')    #Main function    
def main():  global info  #By function get information     source = open("Tourist_spots_5A_BD.txt",'r')    for name in source:    name = unicode(name,"utf-8")    if u'故宫' in name: #else add a '?'    name = u'北京故宫'    getInfobox(name)    print 'End Read Files!'    source.close()    info.close()    driver.close()    main()  

​​​​​​

运行结果


        主要通过从F盘中txt文件中读取国家5A级景区的名字,再调用Phantomjs.exe浏览器依次访问获取InfoBox值。同时如果存在编码问题“'ascii' codec can't encode characters”则可通过下面代码设置编译器utf-8编码,代码如下:
 

#设置编码utf-8  
import sys   
reload(sys)    
sys.setdefaultencoding('utf-8')  
#显示当前默认编码方式  
print sys.getdefaultencoding()  

对应源码


        其中对应的百度百科InfoBox源代码如下图,代码中基础知识可以参考我前面的博文或我的Python爬虫专利,Selenium不仅仅擅长做自动测试,同样适合做简单的爬虫。


编码问题


        此时你仍然可能遇到“'ascii' codec can't encode characters”编码问题。

       它是因为你创建txt文件时默认是ascii格式,此时你的文字确实'utf-8'格式,所以需要转换通过如下方法。

import codecs  #用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode  
if not os.path.exists(baiduFile):    info = codecs.open(baiduFile,'w','utf-8')    
else:    info = codecs.open(baiduFile,'a','utf-8')  #该方法不是io故换行是'\r\n'  
info.writelines(key.text+":"+elem_dic[key].text+'\r\n')    


总结


       你可以代码中学习基本的自动化爬虫方法、同时可以学会如何通过for循环显示key-value键值对,对应的就是显示的属性和属性值,通过如下代码实现:      

 elem_dic = dict(zip(elem_name,elem_value))


       但最后的输出结果不是infobox中的顺序,why? 
       最后希望文章对你有所帮助,还有一篇基础介绍文章,

相关文章:

Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了SeleniumPhantomjs后,准备利用它们获取百度百科的旅游景点消息盒(InfoBox),这也是毕业设计实体对齐和属…...

springcloud笔记 (8) -网关 Gateway

网关 出国需要过海关 网关:网络的关卡 网关的作用 1:路由转发 2:安全控制 保护每个服务,不需要将每个暴露出去 3:负载均衡 1.没有网关:客户端直接访问我们的微服务,会需要在客户端配置很多…...

【C++编程语言】STL常用算法 算术生成和集合算法

1.算术生成算法概念 算法简介&#xff1a; accumlate 计算容器元素累计总和fill 向容器中添加元素 注意&#xff1a;算术生成算法属于小型算法 使用时包含头文件为#include<numeric> 2.accumulate /*函数原型&#xff1a;int accumulate(iterator beg ,iterator end…...

解放双手:VMLogin自动化工具的高效便捷

在现代工作环境中&#xff0c;时间和效率是我们追求的关键。幸运的是&#xff0c;随着技术的发展&#xff0c;自动化工具为我们提供了解放双手的机会。其中&#xff0c;防关联浏览器的自动化就是一种强大的工具&#xff0c;能够简化我们的工作流程并提升效率。本文将探讨浏览器…...

深度解析网络代理技术及其在网络安全和爬虫应用中的关键作用

在当今数字化时代&#xff0c;网络代理技术在维护网络安全、保护隐私以及实现高效数据获取方面发挥着不可或缺的作用。本文将全面解析Socks5代理、IP代理等关键技术&#xff0c;并探讨其在网络安全和爬虫开发中的重要作用。 1. Socks5代理与SK5代理&#xff1a;多功能代理协议…...

寻找二叉树的最低公共祖先节点

两个节点沿二叉树向上找&#xff0c;找到的第一个公共的节点 例&#xff1a;D和F之间的最低公共节点&#xff1a;B D → B&#xff1b; F → E → B&#xff1b; E和G最低公共节点&#xff1a;A E → B → A&#xff1b; G → C → A&#xff1b; B和F最低公共节点&#xff…...

python网络爬虫(二)基本库的使用urllib/requests

使用urllib 了解一下 urllib 库&#xff0c;它是 Python 内置的 HTTP 请求库&#xff0c;也就是说不需要额外安装即可使用。它包含如下 4 个模块。 request&#xff1a;它是最基本的 HTTP 请求模块&#xff0c;可以用来模拟发送请求。就像在浏览器里输入网址然后回车一样&…...

Kafka快速入门(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…...

CTF/AWD竞赛标准参考书+实战指南:《AWD特训营》

作者简介&#xff1a; 懒大王敲代码&#xff0c;正在学习嵌入式方向有关课程stm32&#xff0c;网络编程&#xff0c;数据结构C/C等 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 《AWD特训营》 前言 内容简介 读者对象 本书目录 前言…...

从零开始 Spring Cloud 15:多级缓存

从零开始 Spring Cloud 15&#xff1a;多级缓存 多级缓存架构 传统的缓存使用 Redis&#xff0c;大致架构如下&#xff1a; 这个架构存在一些问题&#xff1a; 请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时&#xff0c;会对数据库产生冲…...

Adobe产品2024

一、软件下载&#xff1a; 二、软件介绍&#xff1a; Adobe公司旗下的产品在影视后期、平面设计等领域有着无可取代的地位。在创意和设计领域中&#xff0c;产品有多达 21 个&#xff0c;包括 Photoshop、Illustrator、InDesign、Premiere Pro、After Effects 和 Acrobat Pro …...

【MySQL】8.0新特性、窗口函数和公用表表达式

文章目录 1. 新增特性2. 移除旧特性2.1 优点2.2 缺点 3. 新特性1&#xff1a;窗口函数3.1 使用窗口函数前后对比3.2 窗口函数分类3.3 语法结构3.4 分类讲解3.4.1 序号函数3.4.1.1 ROW_NUMBER()函数3.4.1.2 RANK()函数3.4.1.3 DENSE_RANK()函数 3.4.2 分布函数3.4.2.1 PERCENT_R…...

华为云云耀云服务器L实例评测|使用clickhouse-benchmark工具对ClickHouse的性能测试

目录 引言 1 ClickHouse简介 2 利用docker安装ClickHouse 2.1 安装Docker 2.2 下载ClickHouse Docker镜像 2.3 创建ClickHouse容器 2.4 访问ClickHouse 3 创建测试表 4 运行 clickhouse-benchmark 5 分析结果 结语 引言 利用华为云的云耀云服务器L实例&#xff0c…...

枚举最大值+ds:1887D

https://codeforces.com/problemset/problem/1887/D 左边区间最大值小于右边区间最小值 肯定要离线 感觉分治&#xff1f; 枚举左边区间最大值 求出其影响范围&#xff0c;推出左端点可取范围 然后可取右端点就是一段连续大于此值得区间 也就是左端点在一段区间时右端点可…...

模拟最终成绩计算过程

首先输入大于2的整数作为评委人数,然后依次输入每个评委的打分,要求每个分数介于0~100.输入完所有评委打分之后,去掉一个最高分,去掉一个最低分,剩余分数的平均分即为该选手的最终得分 (1) while True:try:n int(input(请输入评委人数:))assert n > 2# 跳出循环breakexce…...

Android10 修改开发者选项中动画缩放默认值

Android 10 修改开发者选项中动画因子默认值 开发者选项中有三个动画因子 “Window animation scale” :窗口动画缩放“Transition animation scale” :过渡动画缩放“Animator duration scale” :动画程序时长缩放 修改默然值 默认3个因子都是1.0&#xff0c;现在修改为默认0.…...

【2023年11月第四版教材】软考高项极限冲刺篇笔记(3)

8 成本管理 成本类型:可变成本、固定成本、直接成本、间接成本、机会成本、沉没成本 应急储备:成本基准内 管理成本:成本基准外 进度偏差:SV,SPI 成本管理主要是规划和控制 成本估算 类比估算 参数估算 自上而下估算 三点估算 备选方案分析 储备分析 质量成本 总资…...

c语言进阶部分详解(详细解析自定义类型——结构体,内存对齐,位段)

上篇文章介绍了一些常用的字符串函数&#xff0c;大家可以去我的主页进行浏览。 各种源码大家可以去我的github主页进行查找&#xff1a;Nerosts/just-a-try: 学习c语言的过程、真 (github.com) 今天要介绍的是&#xff1a;结构体的相关内容 目录 一.结构体类型的声明 1.…...

Mysql第三篇---响应太慢?数据库卡顿?如何优化?

Mysql第三篇—响应太慢&#xff1f;数据库卡顿&#xff1f;如何优化&#xff1f; 统计SQL的查询成本&#xff1a;last_query_cost 一条SQL查询语句在执行前需要确定查询执行计划&#xff0c;如果存在多种执行计划的话&#xff0c;MySQL会计算每个执行计划所需要的成本&#x…...

【计算机网络】HTTP 协议的基本格式以及 fiddler 的用法

HTTP协议的基本格式如下&#xff1a; 1.请求行&#xff1a; 包括请求THHP协议的版本、请求URI&#xff08;资源路径&#xff09;和HTTP方法&#xff08;如GET、POST、PUT、DELETE等&#xff09; GET/example.html HTTP/1.1 GET表示请求方法&#xff0c;/example.html表示请求的…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器&#xff0c;通过ch340串口模块完成对继电器的分路控制&#xff0c;这里我编写了一个脚本方便对4路继电器的控制&#xff0c;可以设置开启时间&#xff0c;关闭时间&#xff0c;复位等功能 软件界面 在设备管理器查看串口号后&…...

【AI News | 20250609】每日AI进展

AI Repos 1、OpenHands-Versa OpenHands-Versa 是一个通用型 AI 智能体&#xff0c;通过结合代码编辑与执行、网络搜索、多模态网络浏览和文件访问等通用工具&#xff0c;在软件工程、网络导航和工作流自动化等多个领域展现出卓越性能。它在 SWE-Bench Multimodal、GAIA 和 Th…...