百度网页关键字抓取(标签中,接下来调用Selenium扩展库的find_by_elements)
优采云 发布时间: 2021-10-20 19:03百度网页关键字抓取(标签中,接下来调用Selenium扩展库的find_by_elements)
在标签中,接下来调用Selenium扩展库的find_elements_by_path()函数分别定位属性和属性值。该函数会返回多个属性和属性值集,然后通过for循环输出定位的多个元素值。核心代码如下:
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)
值得注意的是,消息框由左侧的“键”和右侧的“值”、标签中左侧的“键”和标签中右侧的“值”组成。因此,跟踪到特定位置后就可以成功编写代码,达到预期的效果。
至此,利用Selenium技术爬取百度百科词条消息框内容的方法就完成了。
3.2 完整代码实现
上面描述的完整代码位于一个 Python 文件中,但是当代码变得越来越复杂时,复杂的代码量可能会困扰我们。这时候我们可以定义多个Python文件来调用。这里的完整代码是两个文件,test.py 和 getinfo.py。其中,test.py文件定义了getinfo.py文件中的main函数main() getInfobox()函数来抓取消息框。
测试文件
import getinfo
# 主函数
def main():
# 文件读取景点信息
source = open('F:/test.txt', 'r', encoding='utf-8')
for name in source:
print(name)
getinfo.getInfobox(name)
print('End Read Files!')
source.close()
if __name__ == '__main__':
main()
信息文件
import time
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# getInfobox() 函数:获取国家 5A 级景区消息盒
def getInfobox(name):
try:
print(name)
# 浏览驱动器路径
chromedriver = 'E:/software/chromedriver_win32/chromedriver.exe'
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
# 打开网页
driver.get('https://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)
time.sleep(10)
print(driver.current_url)
print(driver.title)
# 爬取消息盒 InfoBox 的内容
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)
# 构建字段成对输出
elem_dic = dict(zip(elem_name,elem_value))
for key in elem_dic:
print(key.text, elem_dic[key].text)
time.sleep(5)
except Exception as e:
print('Error:', e)
finally:
print('\n')
driver.close()
注意:在test.py文件中调用“import getinfo”来导入getinfo.py文件。导入后,可以在main()函数中调用getinfo.py文件中的函数和属性,在getinfo.py文件中调用getInfobox()函数来执行爬取消息框的操作。
4 用Selenium爬今日头条百科4.1 网络分析
本节将讲解一个抓取今日头条百科前10名编程语言页面的摘要信息的例子,并通过这个例子进一步加深对使用Selenium爬虫技术的印象,同时分析网页数据抓取的分析技术更深入。
与前两种方式不同,今日头条可以设置不同条目的网页网址,然后进入条目的详细界面抓取信息。由于URL有一定的模式,可以通过“URL+搜索词名”的方式进行重定向,所以使用这种方式来设置不同的词条网页。
4.1.1 调用 Selenium 分析 URL 并搜索条目
首先分析词条,输入“Python”、“Java”、“PHP”等后,发现我们输入的字符都反映在了链接中。
Python 术语搜索链接:
Java 术语搜索链接:
PHP 术语搜索链接:
虽然“?”后面的值 不一样,你可以大胆的假设,如果把它后面的字符全部删除,只保留前半部分,直到输入字符部分,当我们改变输入值时,是否可以作为输入框的输入?, 跳转到指定页面,答案是肯定的,可以得到同样的结果。
4.1.2 访问指定信息和爬取汇总信息
假设这里要获取流行的 Top 3 编程语言的摘要信息,首先要获取前 3 种编程语言的名称:C、Java、Python。
在浏览器中查看summary部分对应的HTML源码(以Python为例查看)。
因此,您可以选择调用Selenium 的find_element_by_xpath() 函数来获取摘要段落信息。核心代码如下:
# 打开网页
driver.get('https://www.baike.com/wiki/' + name)
# 自动搜索
elem = driver.find_element_by_xpath("//div[@class='content-p ']/span")
print(elem.text)
4.2 完整代码实现
import os
import codecs
from selenium import webdriver
# 获取摘要信息
def getAbstract(name):
try:
print('正在爬取', name, '的摘要信息')
# 新建文件夹及文件
basePathDirectory = "Hudong_Coding"
if not os.path.exists(basePathDirectory):
os.makedirs(basePathDirectory)
baiduFile = os.path.join(basePathDirectory, "hudongSpider.txt")
# 若文件不存在则新建,若存在则追加写入
if not os.path.exists(baiduFile):
info = codecs.open(baiduFile, 'w', 'utf-8')
else:
info = codecs.open(baiduFile, 'a', 'utf-8')
# 浏览驱动器路径
chromedriver = 'E:/software/chromedriver_win32/chromedriver.exe'
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
# 打开网页
driver.get('https://www.baike.com/wiki/' + name)
# 自动搜索
elem = driver.find_element_by_xpath("//div[@class='content-p ']/span")
print(elem.text)
info.writelines(elem.text+'\r\n')
except Exception as e:
print('Error:', e)
finally:
print('\n')
driver.close()
# 主函数
def main():
languages = ['C', 'Java', 'Python']
print('开始爬取')
for language in languages:
getAbstract(language)
print('结束爬取')
if __name__ == '__main__':
main()
文件夹和.txt文件显示信息截图:
5 本文小结
在线百科广泛应用于科学研究、知识图谱和搜索引擎构建、大中小型企业数据整合、Web2.0知识库系统,因为它开放、动态、自由访问和编辑,并具有多国语言版本等特点,深受科研人员和公司开发者的喜爱。常见的在线百科有维基百科、百度百科、今日头条百科等,本文结合Selenium技术,对维基百科的url地址、百度百科的消息框、今日头条的摘要信息进行爬取,采用了三种方法。感谢您的阅读,希望您能根据本文案例对Selenium技术爬取网页有更深入的了解。
欢迎留言,一起学习交流~
谢谢阅读
结尾