首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Pub/Sub和Dataflow从云函数向BigQuery发送HTML?

如何使用Pub/Sub和Dataflow从云函数向BigQuery发送HTML?
EN

Stack Overflow用户
提问于 2022-03-05 14:19:19
回答 1查看 299关注 0票数 0

概述

安装:I有一个Google函数,它由消息触发到Pub/Sub主题。我已经设置了一个作业,以便每分钟向这个Pub/Sub主题发送一条消息。我的云功能被触发,并向另一个Pub/Sub主题发送消息。我设置了一个Dataflow作业,它将数据从这个Pub/Sub主题流到BigQuery。

问题:--如果我的云函数发布的消息包含一个简单的字符串,它会将其转化为BigQuery。如果消息是被刮过的网站的html代码,那么结果不会出现在BigQuery中,我不知道它在哪里丢失。

详细演练

扳机

我的函数function-3是由一条消息触发的,该消息的主题为simple

这是我的云计划程序的工作:

它每分钟向simple主题发送一个字符串(如* * * * *所示)。

功能

我函数的源代码有两个文件:main.pyrequirements.txt

main.py使用https://www.bbc.com/并使用resuests和BeautifulSoup (bs)将其html代码作为字符串。然后,它向主题scrape发布2个字符串。这两个字符串是"publish_this“和BBC网站html的字符串版本。main.py代码

代码语言:javascript
复制
def hello_pubsub(event, context):

    import re
    import json
    import base64
    import requests
    import bs4 as bs
    from google.cloud import pubsub_v1

    def publish(message):
        project_id = "adventdalen"
        topic_name = "scrape"
        publisher = pubsub_v1.PublisherClient()
        topic_path = publisher.topic_path(project_id, topic_name)
        future = publisher.publish(
            topic_path, data=message.encode('utf-8')
        )


    url = "https://www.bbc.com/"
    page = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'})
    bspage = bs.BeautifulSoup(page.text, 'html.parser')
    bspage = str(bspage)

    publish(json.dumps({"html":"publish_this"})) # <- this makes into bigquery
    publish(json.dumps({"html":re.escape(bspage)})) # <- this does not.

requirements.txt是:

代码语言:javascript
复制
# Function dependencies, for example:
# package>=version
google-cloud-pubsub
requests
bs4

数据流工作

我有一份名为ps-to-bq-scrape的数据流工作

它的目标是BigQuery表adventdalen:scrape.scrape (在上面的屏幕截图中突出显示,请参见右位),scrapeinputTopic (高亮上方4行)。

BigQuery表

在BigQuery表中,我希望拥有等同于"publish_this“的行,以及BBC网站html源代码的字符串。相反,我发现:

只有publish_this行出现。为了确保我不是通过只查看“预览”来欺骗自己,我查询不等于publish_this的每一行

我没有得到任何结果。英国广播公司的源代码在某处丢失了。

问题

我相信,上面的main.py有问题。如何修改main.py**,,使不仅是文本"**publish_this**",,而且源也能进入BigQuery行?**

(知道设置是否有问题也是有用的,而不是main.py -我认为这不太可能,这个问题可以通过修复main.py来解决。)

EN

回答 1

Stack Overflow用户

发布于 2022-03-07 22:01:54

可以发生的一件事是,URL没有以正确的方式解析到一个正确的字符串。我建议您使用库来解析uri,然后将其解析为字符串。

您可以使用纱,纱库来解析复杂的uri。

您可以看到这个例子:

代码语言:javascript
复制
>>> from yarl import URL 
>>> url = URL('https://www.python.org/~guido?arg=1#frag') 
>>> url 
URL('https://www.python.org/~guido?arg=1#frag')

您还可以使用urllib.parse.unquote()库,这个库处理从百分比编码的数据到UTF-8字节的解码,然后再处理文本。

您可以看到这个例子:

代码语言:javascript
复制
>>> from urllib.parse import unquote 
>>> url = 'example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0' 
>>> unquote(url)
'example.com?title=правовая+защита'

如果解析不起作用,您能否共享数据流作业的日志,以查看输入或输出中是否有任何问题。

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

https://stackoverflow.com/questions/71362951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档