首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在抓取站点(200或403)时与状态代码不一致

在抓取站点(200或403)时与状态代码不一致
EN

Stack Overflow用户
提问于 2020-05-03 17:22:42
回答 1查看 235关注 0票数 1

我试图把seekingalpha.com新闻部分作为一个个人项目。然而,我似乎无法成功地模拟浏览器,因为一旦我到达第8页左右,我就得到了403 forbidden output code。如果我在私有模式下打开浏览器,我能够手动浏览所有的页面,所以我的IP不会被阻塞。

我正在使用RequestsBeautifulsoupPython3.8

我有:

user-agents

  • Using

  • 添加了一个合法的用户代理,并尝试了随机的请求会话,这些会话应该是自动更新cookies的,我相信(?)
  • 在请求

之间添加了一个引用header

  • Increased时延。

这是我的代码:

代码语言:javascript
复制
import requests
import time
import random
import webbrowser
from bs4 import BeautifulSoup
import re
import sys
import os



class SeekingAlpha():

    from fake_useragent import UserAgent
    ua = UserAgent()

    BASE_URL = 'https://seekingalpha.com/'
    NEWS_URL = BASE_URL + 'articles?page={}'


    def __init__(self):
             self.session = requests.Session()
             self.session.headers['User-Agent'] = 'Mozilla/5.0 (X11;  Ubuntu; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0'

             response =self.session.get(self.BASE_URL)
             response.raise_for_status() 
             self.session.headers['Referrer'] = 'https://seekingalpha.com/'
             print(self.session.headers)
             self.master_urls = []

             for i in range(1,100):        
                page = self.session.get(self.NEWS_URL.format(i))
                time.sleep(random.randint(3,5))
                page.raise_for_status()
                soup = BeautifulSoup(page.content, 'html.parser')
                links = soup.find_all('a', href = True)
                links = [link for link in links if link.has_attr("sasource") and link['sasource'] == 'all_articles']
                self.master_urls.extend(links) 


if __name__ == "__main__":

    master_urls = SeekingAlpha()

编辑:

下面是我通过浏览器看到的第8页的内容(删除标题,以免占用post中太多的空间):

“最新文章

重点:

代码语言:javascript
复制
    All
    Top Ideas
    Editors' Picks
    Small-Cap Insight
    Outstanding Contribution
    Most Popular

文章/新闻记录

代码语言:javascript
复制
Should I Open A Roth IRA Right Now? That Depends
Charles Lewis Sizemore, CFA • Thu, Apr. 30, 11:15 AM
China Continues To Lead World's Major Equity Regions In 2020
James Picerno • MCHI, SPY, VT• Thu, Apr. 30, 11:09 AM
Gold And Gas: 2 Anti-Recession Trades
Atlas Research • QQQ, UNG, SAND• Thu, Apr. 30, 11:05 AM
Excellent Total Return Bond Funds For Momentum-Based Fixed Income Portfolios
MyPlanIQ • TGMNX, BOND, DLTNX• Thu, Apr. 30, 11:04 AM
NXP's Share Price Already Assumes A Lot Of Growth And Improvement
Stephen Simpson, CFA • MCHP, RNECY, TXN• Thu, Apr. 30, 11:01 AM
[This article is one of the editors' picks] Chart Industries Worth Another Look With LNG Mostly Washed Out
Stephen Simpson, CFA • GTLS• Thu, Apr. 30, 10:53 AM
Dana Incorporated 2020 Q1 - Results - Earnings Call Presentation
SA Transcripts • DAN• Thu, Apr. 30, 10:43 AM
Don't Panic! Coronavirus, GDP, And Unemployment
CFA Institute Contributors • SPY, QQQ, DIA• Thu, Apr. 30, 10:42 AM
Predicting Depressions For Dummies, Part II
John Overstreet • SPY, QQQ, DIA• Thu, Apr. 30, 10:37 AM
Cognex Already Trading On Recovery Prospects
Stephen Simpson, CFA • FANUY, CGNX• Thu, Apr. 30, 10:29 AM
Meritor, Inc. 2020 Q2 - Results - Earnings Call Presentation
SA Transcripts • MTOR• Thu, Apr. 30, 10:28 AM

EN

回答 1

Stack Overflow用户

发布于 2020-05-03 19:02:24

你试过增加随机睡眠吗?我想3-5太低了,网站可能会在你第八次请求之后关闭你。要么增加它,要么如果你得到403去睡觉,然后再试一次。

如果您确实需要该数据,请尽快配置一个Tor代理,并使用它一段时间。(为您提供了一个不同的外部IP -为以防万一而放弃您的会话)

有时候,如果你的机器人变得太烦人,网站的所有者会把你赶出去(至少,这是我的经验:-/ )。

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

https://stackoverflow.com/questions/61578723

复制
相关文章

相似问题

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