首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Web抓取问题与漂亮的汤

Web抓取问题与漂亮的汤
EN

Stack Overflow用户
提问于 2020-10-25 10:28:07
回答 1查看 131关注 0票数 0

当我打开要从中抓取信息的url时,HTML代码显示了所有内容。但是当我在网页上抓取它的HTML代码时,它只显示了其中的一部分,而且它甚至不匹配。现在,当网站在我的浏览器上打开时,它确实有一个加载屏幕,但我不确定这就是问题所在。也许他们阻止人们刮掉它?HTML我返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8"/>
<title></title>
<base href="/app"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<link href="favicon.ico" rel="icon" type="image/x-icon"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
<link href="styles.css" rel="stylesheet"/></head>
<body class="cl">
<app-root>
<div class="loader-wrapper">
<div class="loader"></div>
</div>
</app-root>
<script src="runtime.js" type="text/javascript"></script><script src="polyfills.js" type="text/javascript"></script><script src="scripts.js" type="text/javascript"></script><script src="main.js" type="text/javascript"></script></body>
<script src="https://www.google.com/recaptcha/api.js"></script>
<noscript>
<meta content="0; URL=assets/javascript-warning.html" http-equiv="refresh"/>
</noscript>
</html>

我使用的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from twill.commands import *
import time
import requests
from bs4 import BeautifulSoup
go('url')
time.sleep(4)
showforms()

try:
    fv("1", "username", "username")
    fv("1", "password", "*********")
    submit('0')
except:
    pass
time.sleep(2.5)

url = "url_after_login"
res = requests.get(url)
html_page = res.content
soup = BeautifulSoup(html_page, 'html.parser')
print(soup)
#name_box = soup.find('h1', attrs={'class': 'trend-and-value'})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-25 16:57:50

似乎,网页内容是由javascript动态生成的。你可以结合selenium和美汤来解析这样的网页。selenium的优点是,它可以在浏览器中重现用户行为-单击按钮或链接,在输入字段中输入文本等。

下面是一个简短的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from bs4 import BeautifulSoup

# define 30 seconds delay 
DELAY = 30

# define URI
url = '<<WEBSITE_URL>>'

# define options for selenium driver
chrome_options = webdriver.ChromeOptions()
# this one make browser "invisible"
# comment it out to see all actions performed be selenium
chrome_options.add_argument('--headless')

# create selenium web driver
driver = webdriver.Chrome("<PATH_TO_CHROME_DRIVER>", options=chrome_options)

# open web page
driver.get(url)

# wait for h1 element to load for 30 seconds
h1_element = WebDriverWait(driver, DELAY).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.trend-and-value')))

# parse web page content using bs4
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

print(soup)

可替换的解决方案可以是分析呈现的javascript网页。通常,这样的网页以JSON格式从后端端点检索数据,也可以由您的抓取器调用。

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

https://stackoverflow.com/questions/64522671

复制
相关文章
【Rust日报】 2019-05-02:如何快速实践actix和actix-web
wasmer.io继推出 php-ext-wasm 和 python-ext-wasm 后,又马不停蹄做出了面向 ruby 的扩展。这个扩展用来在 Ruby 中执行 wasm 二进制码。wasmer.io 是 wasm 平台化的先驱,其理念是要推动 wasm 成为一个通用的计算平台。
MikeLoveRust
2019/07/09
9810
【Rust日报】 2019-05-02:如何快速实践actix和actix-web
【Rust日报】2023-06-20 使用Quickwit、Jaeger和Grafana监控您的Rust应用程序
使用Quickwit、Jaeger和Grafana监控您的Rust应用程序 你可能已经看过了Lucas Palmieri的博客文章Are we observable yet? An introduct
MikeLoveRust
2023/09/26
7720
【Rust日报】2023-06-20 使用Quickwit、Jaeger和Grafana监控您的Rust应用程序
基于 actix、async-graphql、rbatis 构建异步 Rust GraphQL 服务(2)- 查询服务
上一篇文章中,我们对后端基础工程进行了初始化,未有进行任何代码编写。本文中,我们将不再进行技术选型和优劣对比,直接基于 actix-web 和 async-graphql 构建异步 Rust GraphQL 服务的历程。本章主要是 GraphQL 查询服务,包括如下内容:
niqin.com
2022/06/30
2.5K0
基于 actix、async-graphql、rbatis 构建异步 Rust GraphQL 服务(2)- 查询服务
【Rust日报】 2019-07-17:微软安全响应中心:一种主动性的方式来提升安全
本文简单介绍了在Rust中编写一个工程性更强的组件(crate)所必须要遵循的一些原则:
MikeLoveRust
2019/07/22
9850
【Rust日报】 2019-07-17:微软安全响应中心:一种主动性的方式来提升安全
Tide - 基于 async-std 的 Rust-web 框架
Tide 是小型而实用的 Rust web 应用程序框架,为快速开发而构建。它提供了一组健壮的特性,使得构建异步 web 应用程序和 API 更加容易、更为有趣。
niqin.com
2022/06/30
9560
Tide - 基于 async-std 的 Rust-web 框架
2023 年值得关注的 6 个 Rust web开发框架
在 2023 年,在开始开发 API 和 Web 应用程序之前,哪个 Rust Web 框架最适合研究?在这里,我们将看看一些目前使用或看起来很有前途的最流行的框架。
程序那些事儿
2023/03/07
10.1K0
2023 年值得关注的 6 个 Rust web开发框架
【Rust日报】 2020-07-05 - Rust web 框架比较2020年版
通过解析1000行JSON字符串到String,SmolStr和SmartString,看看他们的性能和内存特征。干货文章
MikeLoveRust
2020/07/14
1.3K0
【Rust日报】2022-02-26 Actix Web 发布 v4.0
Actix Web 是一个强大的高性能 Web 框架,用于创建从小型到单体的 Web 服务。
MikeLoveRust
2022/03/24
5350
基于 actix、async-graphql、rbatis 构建异步 Rust GraphQL 服务-起步及 crate 选择
前段时间,笔者写了一个构建 Rust 异步 GraphQL 服务的系列博文,构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb,采用的 Rust web 框架是 Tide。
niqin.com
2022/06/30
1.6K0
基于 actix、async-graphql、rbatis 构建异步 Rust GraphQL 服务-起步及 crate 选择
【Rust日报】2022-07-25 如何修复和预防 buffered streams 死锁
Rust 消除了在其他语言中流行的各种愚蠢的bug和陷阱,使开发和维护我们的项目变得更加容易。不幸的是,当涉及异步编程中常见问题时,Rust在本质上没有那么强的能力。事实上,异步编程在Rust中要比在 Javascript 中难得多.
MikeLoveRust
2022/11/28
5130
【Rust日报】2022-07-25 如何修复和预防 buffered streams 死锁
使用cargo创建rust程序并运行
我们按照文档在路径中打开命令行终端 cargo new world_hello 我们现在就可以运行了 cd .\world_hello\ cargo run 可以看到输出了Hello, world 我们用vscode打开 可以对我们的代码进行少许更改,然后再次运行 fn main() { println!("world, Hello!"); } 再次运行 cargo run 可以看到我们的修改生效
阿超
2022/08/21
4030
使用cargo创建rust程序并运行
基于 actix、async-graphql、rbatis 构建异步 Rust GraphQL 服务(3)- 重构
首先,我们通过 shell 命令 cd ./actix-web-async-graphql-rbatis/backend 进入后端工程目录(下文中,将默认在此目录执行操作)。
niqin.com
2022/06/30
1.3K0
基于 actix、async-graphql、rbatis 构建异步 Rust GraphQL 服务(3)- 重构
【Rust日报】2023-01-02 学习使用Rust编写嵌入式操作系统
本教程将指导您如何从零开始,使用 Rust 为嵌入式系统编写单片操作系统内核. 它涵盖了常见操作系统任务的实现,比如写入串行控制台, 设置虚拟内存和处理硬件异常.
MikeLoveRust
2023/02/15
8030
【Rust日报】2023-01-02 学习使用Rust编写嵌入式操作系统
【Rust日报】 2019-07-08:hunter - 终端下的文件浏览器
这篇文章涵盖了使用声明宏、过程宏来避免在编写嵌入式代码中遇到的坑:当Embedded Rust编码器调用Mynewt API,驱动程序和其他C函数时,可能会出现字符串相关的问题。为了解决这个问题,作者使用Rust的宏创建了一个新的类型Strn,它表示一个永远不会被修改的以null结尾的字符串。
MikeLoveRust
2019/07/15
9320
【Rust日报】 2019-07-08:hunter - 终端下的文件浏览器
[Rust][权限控制][Casbin] Rust 下成熟好用的权限控制库
Casbin是基于 Go 语言的权限控制库。它支持 ACL, RBAC, ABAC 等常用的访问控制模型。
MikeLoveRust
2020/11/06
1.4K0
【Rust日报】 2019-06-05:actix-web 1.0 正式版发布
actix-web 1.0对于0.7来说,是一次比较彻底的重构。涉及架构重新设计、抽象也由Actor进一步升级到了Service。对于代码层面而言,就是用Service替代了之前的Handler。 1.0的代码也完成遵循Rust惯例,组件化开发,相比于0.7版本的一大坨代码,清爽了很多。
MikeLoveRust
2019/07/09
7720
【Rust日报】 2019-06-05:actix-web 1.0 正式版发布
【Rust 日报】2023-1-19 Lars Bergstrom当选为Rust基金会董事会主席
原文: https://seanmonstar.com/post/706802392260362240/hyper-ish-2022-in-review
MikeLoveRust
2023/02/15
2870
【Rust 日报】2023-1-19 Lars Bergstrom当选为Rust基金会董事会主席
【Rust日报】2022-08-14 Actix Web 的可扩展速率限制中间件
GitHUB: https://github.com/jacob-pro/actix-extensible-rate-limit
MikeLoveRust
2022/11/28
9270
【Rust日报】 2019-08-28:Rust异步代码的优势:相比于其他语言更加容易调试
Part I: https://medium.com/dwelo-r-d/using-c-libraries-in-rust-13961948c72a Part II:https://medium.com/dwelo-r-d/wrapping-unsafe-c-libraries-in-rust-d75aeb283c65
MikeLoveRust
2019/08/30
1.6K0
【Rust日报】 2019-08-28:Rust异步代码的优势:相比于其他语言更加容易调试
【译】Rust 2022 影响力简报
这篇文章将按计算机生态自底向上来总结。以下应用领域其实还有很多工具作者没有列出来,回头找时间我会再扩展一篇。
张汉东
2022/12/08
9080

相似问题

如何在Rust Actix中传递ScyllaDB连接

125

Rust Actix Web支持MongoDB吗?

216

Rust Actix:获取System::current()的SystemRunner

10

无法在Rust/Actix应用中使用柴油计时功能

13

如何向rust actix_web路由传递多个参数

1105
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文