Python 刮取站点时与状态代码不一致(200或403)
我正试图把Python 刮取站点时与状态代码不一致(200或403),python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,我正试图把seekingalpha.comnews部分作为一个个人项目。 然而,我似乎无法成功地模拟浏览器,因为一旦我进入第8页左右,我就会得到403禁止输出代码。如果我在私人模式下打开浏览器,我可以手动浏览所有页面,因此我的IP不会被阻止 我在Python3.8 我有: 添加了合法用户代理以及尝试过的随机用户代理 使用应该自动更新cookies的请求会话,我相信(?) 添加了一个推荐人标题 请求之间的时间延迟增加 这是我的密码: import requests import time im
seekingalpha.com
news部分作为一个个人项目。
然而,我似乎无法成功地模拟浏览器,因为一旦我进入第8页左右,我就会得到403禁止输出代码
。如果我在私人模式下打开浏览器,我可以手动浏览所有页面,因此我的IP不会被阻止
我在Python3.8
我有:
- 添加了合法用户代理以及尝试过的随机用户代理
- 使用应该自动更新cookies的请求会话,我相信(?)
- 添加了一个推荐人标题
- 请求之间的时间延迟增加
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页(删除了标题,以免在帖子中占用太多空间):
"
最新文章
亮点:
All
Top Ideas
Editors' Picks
Small-Cap Insight
Outstanding Contribution
Most Popular
文章|新闻|成绩单
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
“你试过增加随机睡眠吗?我认为3-5太低了,一个网站可能会在你第8次请求后关闭你。或者增加它,或者如果你得到一个403去睡觉,然后再试一次 如果您确实需要尽快获得该数据,请配置Tor代理,并使用一段时间。(为您提供不同的外部IP-删除会话以防万一)
有时,如果你的机器人太烦人,网站所有者会把你赶出去(至少,这是我的经验:-/)。他们可能会阻止多个请求。尝试访问第8页url,然后打印内容(如果你还没有)。看看你看到了什么,这就是为什么它会断裂。至于如何绕过这一点,我不知道。@OldWinterton我已经访问了第8页,我看到了文章的链接。我将更新作品第8页。“如果你不是机器人,请点击这个按钮”是在我看到的html中。我还没有尝试增加睡眠时间,但其他人告诉我,他们以前可以处理100个请求,这与标题有关(尽管他们已经有一段时间不记得细节了)。基本上,网站似乎在使用附加标题来验证您是否是浏览器。我认为(不完全确定),他们正在使用重定向为浏览器提供附加信息,以包含在标题中。我是一个网络开发的初学者,所以我不是百分之百确定。