来自Jupyter的对Instagram的请求在Airflow中失败

问题描述

我正在简单地请求IG帖子以查看全部视图。当我像这样在jupyter中执行此操作时,我没有任何问题:

r = requests.get('https://www.instagram.com/p/CDjX7uAl0zg/?igshid=lcsk0qnidrcz')
r.content

这将返回内容,可以对其进行解析。

当我在Airflow中的任务中执行相同的请求时,该请求不返回任何内容。有什么作用?

编辑:添加我的完整代码

from airflow import DAG
from airflow.models import Variable
from airflow.operators.python_operator import Pythonoperator
from datetime import datetime,timedelta
from bs4 import BeautifulSoup
from pandas.io.json import json_normalize
import pandas as pd
import requests
import json
import logging

video_links = ['https://www.instagram.com/p/CDjX7uAl0zg/?igshid=lcsk0qnidrcz']

def get_data(video_links):
    for link in video_links:
    logging.info(link)
    r = requests.get(link)
    logging.info('Page...')
    logging.info(r.status_code)
    logging.info(r.content)
    logging.info(type(r.content))
    logging.info(r)
    soup = BeautifulSoup(r.content,'html.parser')

get_data = Pythonoperator(
    task_id='get_data',python_callable=get_data,dag=dag
)

send_to_s3_and_redshift = Pythonoperator(
    task_id='send_to_s3_and_redshift',python_callable=send_to_s3_and_redshift,dag=dag
)

get_data >> send_to_s3_and_redshift


它是非常简单的代码。传递了IG链接列表,然后它请求该链接并解析结果。但是r.content似乎不存在。疯狂的部分是,日志记录甚至无法在此行上工作:

logging.info(r.content)

相反,它直接进入下一行日志记录,并打印str作为类型。响应码为200,类型为str,但不会打印或解析。我唯一能猜到的是IG正在阻止发出请求的气流?但是后来我不明白为什么它会用200代码来响应,为什么它在本地也可以正常工作

编辑:添加日志以显示缺少r.content打印:

[2020-08-25 23:20:39,280] {base_task_runner.py:98} INFO - Subtask: [2020-08-25 23:20:39,279] {_kondo_crowdtangle.py:74} INFO - https://www.instagram.com/p/CDjX7uAl0zg/?igshid=lcsk0qnidrcz
[2020-08-25 23:20:39,438] {base_task_runner.py:98} INFO - Subtask: [2020-08-25 23:20:39,438] {_kondo_crowdtangle.py:76} INFO - Page...
[2020-08-25 23:20:39,439] {base_task_runner.py:98} INFO - Subtask: [2020-08-25 23:20:39,438] {_kondo_crowdtangle.py:77} INFO - 200
[2020-08-25 23:20:39,439] {_kondo_crowdtangle.py:79} INFO - <type 'str'>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)