Python 3.x 用靓汤抓取网页(不捕获所有信息)
我已经用过漂亮的汤包好几次了,但这是第一次它没有我需要的所有信息。如何获取完整的网页?我需要提取所有的出版物和超链接到文件Python 3.x 用靓汤抓取网页(不捕获所有信息),python-3.x,beautifulsoup,Python 3.x,Beautifulsoup,我已经用过漂亮的汤包好几次了,但这是第一次它没有我需要的所有信息。如何获取完整的网页?我需要提取所有的出版物和超链接到文件 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')
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')
网页中还有其他HTTP请求。 查看这些内容的一个好方法是使用web浏览器中提供的检查器。 在Chrome中,您可以在inspector的“网络”选项卡下看到这些请求 请求如下:
- 得到
- 得到
- 得到
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的元素很难解析,因为它包含字典名称中不允许的字符(即“@”),
但这一解决方案应该奏效
请注意,我尚未测试此解决方案,因此可能存在一些错误,但解决方案背后的基本逻辑应该是正确的
或者: 您可以使用,它用于呈现基于Javascript的页面。您可以非常轻松地在Docker中运行Splash,只需向Splash容器发出HTTP请求,该容器将返回与web浏览器中呈现的网页相似的HTML 虽然这听起来过于复杂,但实际上设置起来非常简单,因为您根本不需要修改Docker映像,因此您不需要了解Docker之前的知识即可工作。只需一行即可启动本地启动服务器:
docker run-p8050:8050-p5023:5023 scrapinghub/splash
然后,您只需修改Python代码中的任何现有请求,改为路由到splash:
i、 e.http://example.com/
变为http://localhost:8050/render.html?url=http://example.com/
网页中还有其他HTTP请求。
查看这些内容的一个好方法是使用web浏览器中提供的检查器。
在Chrome中,您可以在inspector的“网络”选项卡下看到这些请求
请求如下:
- 得到
- 得到
- 得到
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的元素很难解析,因为它包含字典名称中不允许的字符(即“@”),
但这一解决方案应该奏效
请注意,我尚未测试此解决方案,因此可能存在一些错误,但解决方案背后的基本逻辑应该是正确的
或者: 您可以使用,它用于呈现基于Javascript的页面。您可以非常轻松地在Docker中运行Splash,只需向Splash容器发出HTTP请求,该容器将返回与web浏览器中呈现的网页相似的HTML 虽然这听起来过于复杂,但实际上设置起来非常简单,因为您根本不需要修改Docker映像,因此您不需要了解Docker之前的知识即可工作。只需一行即可启动本地启动服务器:
docker run-p8050:8050-p5023:5023 scrapinghub/splash
然后,您只需修改Python代码中的任何现有请求,改为路由到splash:
i、 e.http://example.com/
变为http://localhost:8050/render.html?url=http://example.com/
缺少什么?我用了你的密码,得到了完整的网页(至少在某种程度上,它说@DanielButler我缺少==$0。我需要提取中的信息。当我可以访问我的计算机时,我将查看是否是另一个http请求填充了您的信息。)after@DanielButler非常感谢!我只是不知道如何使用安全的网页。我不介意你这样做你也知道我将如何访问API。我正在努力小心,因为GDPR。缺少什么?我使用了你的代码并获得了完整的网页(至少在某种程度上,它说@DanielButler我缺少==$0。我需要提取中的信息。当我可以访问我的计算机时,我将查看是否是另一个http请求填充了您的信息。)after@DanielButler非常感谢!我只是不知道如何使用安全的网页。我不介意你这样做你也知道我将如何访问API。由于GDPR的原因,我正在努力小心。在使用请求时,你不需要json
模块。请求
模块有一个内置的json解析器。在你的代码中,你可以直接使用data=requests.get(new_url).json()
。正是我要找的!现在在家里很难获得计算机时间。因此通过splash
我可以轻松渲染js
页面?我实际上已经找了很长一段时间了。在使用请求时,你不需要json
模块。请求
模块有一个内置的JSON解析器。在你的代码中,你可以直接使用data=requests.get(new_url).json()
。这正是我要寻找的!现在在家里很难获得计算机时间。所以通过splash
我可以轻松地呈现js
页面?实际上我已经找了很长一段时间了。