- 此问题在此处已有答案**:
Scraping data to Google Sheets from a website that uses JavaScript(2个答案)
4天前关闭。
我正在尝试从BostonGlobe网站https://www.bostonglobe.com/search/?p1=BGSearch_Overlay&q=problem中提取标题,标题嵌入在div中,我使用Google Sheets函数importxml来抓取标题,代码为
=IMPORTXML("https://www.bostonglobe.com/search/?p1=BGSearch_Overlay&q=problem","//div[@class= 'queryly_item_title')]")
但是,结果显示导入的XML内容无法解析。有人知道发生了什么吗?我应该如何修改我的代码?
3条答案
按热度按时间sczxawaw1#
Google工作表导入公式不支持javaScript内容,将被废弃:
fivyi3re2#
vaj7vani3#
我可以提供一个变通方案。
进入实际的网页,按Ctrl-A选择整个网页内容。按Ctrl-C复制到剪贴板。然后进入谷歌表格,点击任何空白表格的A1,按Ctrl-V复制所有网页内容。它会运行到A列。
现在,在另一个空列的某个单元格中(比如现在是C2),放入以下公式:
第一个月
这样就可以从A栏的内容中提取标题。
FILTER
使用REGEXMATCH
来提取任何带有“By”行的内容。JOIN
部分形成了所有三字母月份名称的REGEX“OR列表”。(年份不重要;它必须是“something”,这样DATE
才能从中提取月份名称,最里面的REGEXREPLACE将用波浪号(~)替换那些三个字母的月份名称,作为要删除的内容的标记。最外层的REGEXREPLACE将删除从那里到那些字符串末尾的内容,只留下头。
没有其他网页的保证,但这个过程和公式(S)应在所有类似的标题列表页从这个网站。
如果你还需要保持超链接的活跃状态,那就有点麻烦了,你必须分两栏来完成:
在上例中,我们将第一个公式放置在C2中。在D2中,您可以放置以下公式(取自第一个公式):
=ArrayFormula(FILTER(A:A,REGEXMATCH(A:A,"\/ By")))
这会将整个标题、副标题和开头细节提取为一个长字符串,但会保留超链接。只需将D列宽度更改为50这样窄的值,然后选择整个D列并应用格式〉换行〉剪辑来截断溢出。
如果你想打破对网页的依赖“数据下降”在A栏,这样你就可以删除所有:
1.)选择整个公式列,然后按Ctrl-C复制到剪贴板。
2.)打开一个新的Word文档(或者GoogleDocs,但是如果你有Word的话,我建议你使用它,因为它不在Google帝国的范围内,而且会完全分离出更多的方面),按Ctrl-V粘贴公式结果。
3.)然后按Ctrl-A选择您刚刚放入Word文档的内容,按Ctrl-C将其复制回剪贴板,然后返回Google Sheets [公式列仍处于选中状态]并按Ctrl-V。
4.)如果需要,您需要应用格式〉环绕〉剪辑来截断要剪辑的溢出。
然后可以删除Col-A数据。
这看起来似乎有很多事情要做。但是老实说,实际上,从开始到结束应该只需要不到一分钟的时间。