关于爬虫的疑问
本帖最后由 wrpython 于 2024-7-5 02:46 编辑大家好,
我在尝试写一个从网页https://www.sec.gov/cgi-bin/current?q1=0&q2=2&q3=144里读取当天的144文件的爬虫,这个网页允许爬虫读取,但是有限制条件,最主要的一条限制是发送的请求不能超过10次/秒,因为我对读取速度没有要求,所以就把速度限制在1次/秒,但是在读取了一部分内容之后还会被网站拒绝,给出的信息显示我的读取超过了读取率限制——Request Rate Threshold Exceeded,麻烦大家看看这是怎么回事??下面是我的代码:
这里代码贴不全,完整的代码我贴在二楼了
第一个for循环是可以正常运行的,也可以读取到页面里的所有链接,但是第二个for循环不能正常运行,总是在读取了前几个链接后就中断,给出的错误信息截图如下:
我在第二个for循环里增加了一行代码,打印了soup2的内容,发现这个爬虫被限制访问了,给出的信息如下,我把觉得重要的部分标记了出来:
我觉得我的爬虫请求频率那么低,应该不是这个原因,另一个可能的原因就是对方要求我澄清自己的流量来源,Please declare your traffic by updating your user agent to include company specific information. 也就是第二个红框里的最后一句话,我不知道怎么在user-agent里添加公司信息,于是又去官网找了下,找到了这些内容,网址:SEC.gov | Accessing EDGAR Data:
但是看完以后更加一头雾水了.....完全不知道怎么改user-agent, 网上也没找到什么解决方案,所以前来这里问一下,麻烦各位大佬帮忙看看。谢谢!
看了下代码逻辑,就是一个单线程1S频率的请求,逻辑没有问题。
你的第二个推测是合理的,该网站要求你在请求头中提供你的身份
可以尝试参照网站实例,包装一个假的公司信息到请求头。
headers = {'User-Agent':'FishC Xiaojiaoyu@fishc.com.cn',Accept-Encoding:"gzip, deflate",Host:"www.sec.gov"}
这里我捏造的鱼C的数据进去,网站应该不会进行验证,即便验证,鱼C的域名也是存在的{:10_335:}
本帖最后由 wrpython 于 2024-7-5 02:47 编辑
import requests
from bs4 import BeautifulSoup
import time
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'}
content = requests.get('https://www.sec.gov/cgi-bin/current?q1=0&q2=2&q3=144', headers = headers).text
soup = BeautifulSoup(content, 'html.parser')
test = soup.findAll('a')
n = 1 #计数,只读取偶数标签对应的链接
ls = [] #用于存储读取到的链接
n1 = 0 #统计总共有多少条链接
#先在原始页面读取今天所有的链接然后存入列表中
for i in test[:-1]:
n = n + 1
if n % 2 == 0:
link = 'https://www.sec.gov/'+i['href']
print(link)
ls.append(link)
n1 = n1+1
ls2 =[] #用来存从ls列表的链接里读到的新链接
n2 = 1 #用来计数,记录当前都到第几个链接
for i in ls:
time.sleep(1)
content2 = requests.get(i, headers = headers).text
soup2 = BeautifulSoup(content2, 'html.parser')
print(soup2)
test2 = soup2.findAll('tr')
link2 = 'https://www.sec.gov/' + test2.a['href']
ls2.append(link2)
print('%d/%d'%(n2,n1))
n2 = n2+1 bba-vw 发表于 2024-7-5 02:43
看了下代码逻辑,就是一个单线程1S频率的请求,逻辑没有问题。
你的第二个推测是合理的,该网站要求你在请 ...
谢谢!更换user-agent以后,代码就可以正常运行了!
页:
[1]