首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Javascript元素抓取网页

用Javascript元素抓取网页
EN

Stack Overflow用户
提问于 2020-07-08 02:14:07
回答 1查看 53关注 0票数 0

所以为了给我的网站做前言,我似乎使用了javascript代码(关于web开发之类的术语我不太确定),并且我在不同的页面上尝试抓取不同的表格也取得了不同的成功。

例如,在这个页面上:http://www.tennisabstract.com/cgi-bin/player.cgi?p=NovakDjokovic,我可以轻松地“检查元素”,然后转到Network,找到脚本的正确“名称”,然后找到获取我想要的表所需的请求URL。我使用的代码是:

代码语言:javascript
代码运行次数:0
运行
复制
url = 'http://www.minorleaguesplits.com/tennisabstract/cgi-bin/frags/NovakDjokovic.js'
content = requests.get(url)
soup = BeautifulSoup(content.text, 'html.parser')

table = soup.find('table', id='tour-years', attrs= {'class':'tablesorter'})
dfs = pd.read_html(str(table)) 
df = pd.concat(dfs)

但是,现在当我在同一站点上查看不同的页面时,比如这个http://www.tennisabstract.com/charting/20190714-M-Wimbledon-F-Roger_Federer-Novak_Djokovic.html,我无法找到最终允许我获得我想要的表的请求URL。我重复了与上面相同的过程,但是在Network选项卡下没有包含该表的.js脚本。当我查看html元素时,我确实看到了这个表,但当然,如果没有正确的url,我就无法获得它。

所以我的问题是,如何从这个页面http://www.tennisabstract.com/charting/20190714-M-Wimbledon-F-Roger_Federer-Novak_Djokovic.html中获取表格?

蒂娅!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 02:42:19

在查看html页面的源代码时,您可以看到所有数据都已加载到script标记中。你唯一想要的就是提取变量值并将其加载到漂亮汤中。

下面的代码给出了脚本标记中的所有变量和值

代码语言:javascript
代码运行次数:0
运行
复制
import requests, re
from bs4 import BeautifulSoup

res = requests.get("http://www.tennisabstract.com/charting/20190714-M-Wimbledon-F-Roger_Federer-Novak_Djokovic.html")
soup = BeautifulSoup(res.text, "lxml")
script = soup.find("script", attrs={"language":"JavaScript"}).text

var_only = script[:script.index("$(document)")].strip()

接下来,您可以使用正则表达式获取变量值- https://regex101.com/r/7cE85A/1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62781495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档