我曾经使用过几次漂亮的汤包,但这是第一次没有我需要的所有信息。如何获得完整的网页?我需要提取所有出版物和论文的超链接。
from bs4 import BeautifulSoup
import requests
url = 'https://openreview.net/group?id=ICLR.cc/2018/Conference'
source = requests.get(url).text
soup = BeautifulSoup(source, 'html.parser')
答案 0 :(得分:3)
还有其他HTTP请求正在填写网页。 查看这些内容的好方法是使用Web浏览器中提供的检查器。 在Chrome中,您可以在“网络”下查看这些请求。检查员中的选项卡。
请求如下:
似乎每个人都会返回JSON文本以及您要查找的信息(文章的出版物和超链接), 因此,您只需为每个URL创建单独的请求,并按以下方式访问返回的JSON:
import json
source = requests.get(new_url).text
# json.loads returns a Python dictionary
data = json.loads(source)
for publication in data['notes']:
publication_info = publication['_bibtex']
url = publication_info.split('\nurl={')[1].split('}')[0]
包含每个发布的URL的元素很难解析,因为它在字典名称中不允许使用字符(即' @'), 但这个解决方案应该可行。
请注意,我没有测试过此解决方案,因此可能存在一些错误,但解决方案背后的基础逻辑应该是正确的。
您可以使用Splash,它用于呈现基于Javascript的页面。您可以非常轻松地在Docker中运行Splash,只需向Splash容器发出HTTP请求,该容器将返回看起来就像在Web浏览器中呈现的网页一样的HTML。
虽然这听起来过于复杂,但实际上设置起来非常简单,因为您根本不需要修改Docker镜像,因此您无需先知道docker即可工作。它只需要一行就可以启动本地Splash服务器:
docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash
然后,您只需修改Python代码中的任何现有请求即可转发到splash:
即。 http://example.com/
成为
http://localhost:8050/render.html?url=http://example.com/