我正在try 捕捉我发送到许多网站的请求是否已被重定向.首先,让我给你一些例子数据.

redirected_urls = [
    "http://www.tagesschau.de/inland/vw-schalte-hapke-101.html",
    "http://de.reuters.com/article/deutschland-volkswagen-idDEKCN10V0H3"
]

healthy_urls = [
    "http://www.focus.de/finanzen/news/wirtschaftsticker/machtkampf-zwischen-vw-und-zulieferern-stoppt-autoproduktion_id_5842241.html",
    "https://www.bild.de/news/aktuelles/news/vw-kuendigt-harte-gangart-gegen-lieferstopp-47400500.bild.html"
]


redirected_df = pd.DataFrame({'URL': redirected_urls})
healthy_df = pd.DataFrame({'URL': healthy_urls})

因此,在REDIRECTED_DF中是实际被重定向的链接,但是其他数据帧不会被重定向.正如在这个post中提到的,我try 设置allow_redirects=False,然后意识到我正在使用的所有链接都以某种方式被重定向,尽管我可以看到实际的新闻文章.因此,所有的响应代码都是200,表示连接成功.然后我判断了response.history中几乎所有的链接,我得到了[<Response [301]>].使用BeautifulSoup(response._content).find('link', {'rel': 'canonical'}),它们都有价值.

然后我想把这个信息保存在我的数据框中,就像这个_df.at[k,'Is_Redirected']= 1 if response.history else 0.对于上面提到的所有链接,我得到1(True).

我使用的代码:

def send_two_requests(_url):
        try:
            headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36"}
            response = requests.get(_url,headers=headers,allow_redirects=True, timeout=10)
            return response
        except:
            return func_timeout.func_timeout(timeout=5, func=send_request, args=[_url])   


for k,link in enumerate(_df['url']):      
 response =  send_two_requests(_df.at[k,'url']) 
                if  response is not None:
                    _df.at[k,'Is_Redirected']= 1 if response.history else 0

有没有什么我可以区分的实际链接的工作,和那些得到重定向?

推荐答案

我只是想看看链接是否被重定向了.我注意到,我有许多URL有一些小的改变,例如,他们中的大多数使用的是http,而实际的网站是Https,因此它会标记为重定向,但实际上它没有重定向,我看到的是相同的页面.因此,我try 判断响应URL和difflib库中的URL之间的差异.如果链接99%相似,那么我不认为这是重定向的URL.

if difflib.SequenceMatcher(None, response.url, _df.at[k,'URL']).ratio()>=0.99:
                            _df.at[k,'is_redirected']=0
                        else:
                            _df.at[k,'is_redirected']=1

Python相关问答推荐

仅使用2种 colored颜色 创建热图

使用Curses for Python保存和恢复终端窗口内容

如何观察cv2.erode()的中间过程?

如果我已经使用了time,如何要求Python在12秒后执行另一个操作.sleep

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

如何用symy更新分段函数

计算相同形状的两个张量的SSE损失

Pandas 第二小值有条件

从webhook中的短代码(而不是电话号码)接收Twilio消息

为什么tkinter框架没有被隐藏?

在Python中处理大量CSV文件中的数据

如何在Python脚本中附加一个Google tab(已经打开)

如何从pandas的rame类继承并使用filepath实例化

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

根据列值添加时区

当递归函数的返回值未绑定到变量时,非局部变量不更新:

如何使用SentenceTransformers创建矢量嵌入?

try 检索blob名称列表时出现错误填充错误""

dask无groupby(ddf. agg([min,max])?''''

numpy.unique如何消除重复列?