Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 用靓汤抓取网页(不捕获所有信息)_Python 3.x_Beautifulsoup - Fatal编程技术网

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的“网络”选项卡下看到这些请求

请求如下:

  • 得到
  • 得到
  • 得到
似乎每个人都会返回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的元素很难解析,因为它包含字典名称中不允许的字符(即“@”), 但这一解决方案应该奏效

请注意,我尚未测试此解决方案,因此可能存在一些错误,但解决方案背后的基本逻辑应该是正确的


或者: 您可以使用,它用于呈现基于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的“网络”选项卡下看到这些请求

请求如下:

  • 得到
  • 得到
  • 得到
似乎每个人都会返回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的元素很难解析,因为它包含字典名称中不允许的字符(即“@”), 但这一解决方案应该奏效

请注意,我尚未测试此解决方案,因此可能存在一些错误,但解决方案背后的基本逻辑应该是正确的


或者: 您可以使用,它用于呈现基于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
页面?实际上我已经找了很长一段时间了。