js抓取网页内容( “显示更多”按钮刮一个谷歌学者页面(组图) )
优采云 发布时间: 2022-03-16 06:08js抓取网页内容(
“显示更多”按钮刮一个谷歌学者页面(组图)
)
使用 Selenium 使用 javascript 抓取网页
pythonseleniumweb-scraping
使用 Selenium 用 javascript、javascript、python、selenium、web-scraping、beautifulsoup、Javascript、Python、Selenium、Web Scraping、Beautifulsoup 抓取网页,我想用“显示更多”按钮抓取一个 Google Scholar 页面。我从上一个问题中了解到,它不是 html 而是 javascript,并且有几种方法可以抓取这样的页面。我尝试了 selenium 并尝试了以下代码 from selenium import webdriverfrom bs4 import BeautifulSoupoptions = webdriver.ChromeOptions()options.add_argument('--ignore-certificate-errors')option
我想用“显示更多”按钮抓取一个谷歌学者页面。我从上一个问题中了解到,它不是 html 而是 javascript,并且有几种方法可以抓取这样的页面。我尝试了硒并尝试了以下代码
from selenium import webdriver
from bs4 import BeautifulSoup
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless')
chrome_path = r"....path....."
driver = webdriver.Chrome(chrome_path)
driver.get("https://scholar.google.com/citations?user=TBcgGIIAAAAJ&hl=en")
driver.find_element_by_xpath('/html/body/div/div[13]/div[2]/div/div[4]/form/div[2]/div/button/span/span[2]').click()
soup = BeautifulSoup(driver.page_source,'html.parser')
papers = soup.find_all('tr',{'class':'gsc_a_tr'})
for paper in papers:
title = paper.find('a',{'class':'gsc_a_at'}).text
author = paper.find('div',{'class':'gs_gray'}).text
journal = [a.text for a in paper.select("td:nth-child(1) > div:nth-child(3)")]
print('Paper Title:', title, '\nAuthor:', author, '\nJournal:', journal)
浏览器现在单击“显示更多”按钮并显示整个页面。但是,我仍然只能获得前 20 篇论文的信息。我不理解为什么。请帮忙
谢谢
我认为您的问题是当您的程序检查 网站 时,新元素尚未完全加载。尝试导入时间,然后睡几分钟。这样(我删除了无头功能,以便您可以看到程序工作):
导入时间
从selenium导入webdriver
从selenium.webdriver.chrome.options导入选项
选项=选项()
options.page_load_策略='normal'
driver=webdriver.Chrome(options=options)
驱动程序。获取(“https://scholar.google.com/citations?user=TBcgGIIAAAAJ&hl=en")
#笨拙的方法
#加载所有可用文章,然后对其进行迭代
对于范围(1,3)内的i:
驱动程序。通过_css_选择器('#gsc_bpf_more')查找_元素。单击()
#等待元素加载
时间。睡眠(3)
#所有数据所在的容器
对于驱动程序中的结果。通过“css”选择器(“#gsc_a_b.gsc_a_t”)查找“元素”:
title=result.find_element_by_css_选择器('.gsc_a_at')。text
authors=result.find_element_by_css_selector('.gsc_a_at+.gs_gray')。text
publication=result.find_element_by_css_选择器('.gs_gray+.gs_gray')。text
印刷品(标题)
印刷品(作者)
印刷品(出版物)
#只是为了分开
打印()
部分输出:
有环保意识的消费者参与的税收/补贴政策
南班萨尔,南甘戈帕迪亚
环境经济与管理杂志45(2),333-355
绿色消费者面前监管工具的选择与设计
班萨尔群岛
资源和能源经济学30(3),345-368
from selenium import webdriver
import time
from bs4 import BeautifulSoup
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
driver = webdriver.Chrome()
driver.get("https://scholar.google.com/citations?user=TBcgGIIAAAAJ&hl=en")
time.sleep(3)
driver.find_element_by_id("gsc_bpf_more").click()
time.sleep(4)
soup = BeautifulSoup(driver.page_source, 'html.parser')
papers = soup.find_all('tr', {'class': 'gsc_a_tr'})
for paper in papers:
title = paper.find('a', {'class': 'gsc_a_at'}).text
author = paper.find('div', {'class': 'gs_gray'}).text
journal = [a.text for a in paper.select("td:nth-child(1) > div:nth-child(3)")]
print('Paper Title:', title, '\nAuthor:', author, '\nJournal:', journal)