百度网页关键字抓取(标签中,接下来调用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技术爬取网页有更深入的了解。

  欢迎留言,一起学习交流~

  谢谢阅读

  结尾

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线