Python Spider

您所在的位置:网站首页 excel获取网页实时数据代码是什么 Python Spider

Python Spider

2023-06-04 23:02| 来源: 网络整理| 查看: 265

目的:爬取毕设所需的数据源,包括论文标题、论文作者以及作者的详细信息。 所需第三方库:

Requests库Selenium库BeautifulSoup库

先贴一个我爬取到的结果图: 在这里插入图片描述

下面进入正题。 首先,我们打开某网首页:https://www.cnki.net/ 在这里插入图片描述 我们必须先输入关键词,再点击搜索按钮才能够得到我们想要的内容,在此我以知识图谱为例进行搜索。按下F12查看网页的源码: 在这里插入图片描述 如上图,我们可以看到输入框所对应的input元素,将鼠标移到input标签上点击右键,选择Copy -> Copy selector 就可以拿到改标签的选择器,如下图: 在这里插入图片描述 我们以同样的方式也可以拿到搜索按钮的选择器: 在这里插入图片描述 这样做的目的是为了使用selenium代替我们去自动输入关键字以及搜索。 这里写一个driver_open方法,接收一个参数代表要搜索的关键字,使用google的driver。(这个driver需要下载到本地)

from bs4 import BeautifulSoup from selenium import webdriver import time import requests import csv # 进入首页并搜索关键词 def driver_open(key_word): url = "https://www.cnki.net/" driver = webdriver.Chrome("D:/Software/chorme/chromedriver.exe") driver.get(url) # 进入首页 time.sleep(2) # 将关键词输入搜索框 driver.find_element_by_css_selector('#txt_SearchText').send_keys(key_word) time.sleep(2) # 点击搜索按钮 driver.find_element_by_css_selector('body > div.wrapper.section1 > div.searchmain > div > div.input-box > input.search-btn').click() time.sleep(5) driver.close() # 拿到返回结果 content = driver.page_source.encode('utf-8') soup = BeautifulSoup(content, 'lxml') # 解析返回结果 return soup

至此,我们拿到了一个soup对象,这个soup对象就是输入关键字后搜索得出的网页。如搜索“知识图谱”得到的soup: 在这里插入图片描述 我们再对这个网页进行分析,我们需要的内容是论文标题、作者名以及作者的详细信息。同样的,我们按下F12查看网页的源代码,可以发现我们需要的主体信息全都在这个table的tbody中: 在这里插入图片描述 用代码获取到这个tbody,然后对其解析

tbody = soup.find_all('tbody') # 获取tbody标签 tbody = BeautifulSoup(str(tbody[0]), 'lxml') # 解析

这里通过find_all拿到的结果是一个数组。 然后我们继续观察,可以发现每一篇论文对应了tbody下的一个tr,tr下的td中包含了论文标题和作者列表等: 在这里插入图片描述 以同样的方法,我们可以拿到tbody标签下的所有tr元素,以及tr元素下的所有td元素:

tr = tbody.find_all('tr') # 获取tr标签,返回一个数组 # 对每一个tr标签进行处理 for item in tr: tr_bf = BeautifulSoup(str(item), 'lxml') # 获取论文标题 td_name = tr_bf.find_all('td', class_ = 'name') # 拿到tr下的td td_name_bf = BeautifulSoup(str(td_name[0]), 'lxml') a_name = td_name_bf.find_all('a') # get_text()是获取标签中的所有文本,包含其子标签中的文本 title = a_name[0].get_text().strip() print("title : " + title) # 获取包含作者的那个td td_author = tr_bf.find_all('td', class_ = 'author') td_author_bf = BeautifulSoup(str(td_author), 'lxml') # 每个a标签中都包含了一个作者名 a_author = td_author_bf.find_all('a') authors = [] # 拿到每一个a标签里的作者名 for author in a_author: name = author.get_text().strip() # 获取学者的名字 print('name : ' + name) authors.append(name) paper = Paper(title, authors) papers.append(paper)

至此,我们就拿到了论文标题和对应的作者列表 上述代码中的Paper是自定义的论文类,如下:

# 定义论文类 class Paper: def __init__(self, title, authors): self.title = title self.authors = authors

至此,我们就拿到了包含论文标题和论文作者的papers对象数组。

下一篇:PythonSpider——爬取论文数据(二) 讲了如何爬取多页,以及如何爬取作者的详细信息。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3