首页 > 解决方案 > 如何从 HTML 对象中提取所有信息(包括未显示的信息)

问题描述

我正在尝试从 Google 学者中提取 Jean Tirole 的所有文章(网址:https ://scholar.google.com/citations?hl=en&user=ZEDUm5UAAAAJ&view_op=list_works&sortby=title )。下载网址后,我尝试了以下操作:

tirole_parent <- read_html("jean_tirole_GoogleScholarCitations.html")
tirole_table <- tirole_parent %>% 
                html_nodes(xpath = '//*[@id="gsc_a_b"]') %>% 
                html_nodes(xpath = "tr") %>%
                html_nodes(xpath = "td") %>%
                html_text()

但是,这只给了我前 20 篇文章。如何从 HTML 中获取所有文章?

标签: rweb-scraping

解决方案


  1. 如果您正在寻找 grep 标题名称,那么它的正确名称是gsc_a_at
  2. 当您按下 时Show More,实际上它是XHR使用以下参数发出请求,即cstartpagesize
  3. cstart是从它开始的页面。pagesize是每页的总结果,最大值是100
  4. 总的结果是660,我将从 0 开始到 660。
from bs4 import BeautifulSoup
import requests

for start in range(0, 700, 100):
    r = requests.get(
        f"https://scholar.google.com/citations?hl=en&user=ZEDUm5UAAAAJ&view_op=list_works&sortby=title&cstart={start}&pagesize=100")
    soup = BeautifulSoup(r.text, features="html.parser")
    for item in soup.findAll('a', attrs={'class': 'gsc_a_at'}):
        print(item.text)

您可以通过That Link在线查看输出


推荐阅读