python - 使用 Python 和 BeautifulSoup 进行抓取,循环出现问题(初学者)
问题描述
我认为我的循环有问题。我得到了第一天的所有内容(每天有几篇文章),但之后每天只有一篇文章。此外,它只是在循环完成之前的一段时间后停止。有人可以帮助诊断问题吗?这是我所拥有的:
from bs4 import BeautifulSoup as bs
import requests
import datetime
from datetime import timedelta
from datetime import date
import time
base_url = 'https://www.wsj.com/news/archive/'
startDate = date(2020, 1, 1)
endDate = date(2020, 5, 9)
delta = timedelta(days=1)
while startDate <= endDate:
try:
url_template = base_url + startDate.strftime("%Y%m%d")
url = url_template
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'})
content = bs(response.content, "html.parser")
headlines = content.find_all("h3")
for headline in headlines:
title = headline.find("a").text
print(str(startDate) + ',"' + title + '"')
time.sleep(10)
startDate += delta
except Exception as e:
break
这是我自己停止时的输出:
2020-01-01,“唐·拉森,唯一一款完美世界系列游戏,享年90岁”
2020-01-01,“更正与放大”
2020-01-01,“诗人为新的一年提供一个深情,精神的开始”
2020-01-01,“奥地利保守党和绿党组成联合政府”
2020-01-01,“牛市进入2020年”
2020-01-01,“医院合并。质量没有提高。”
2020-01-01,“前NBA总裁大卫·斯特恩去世”
2020-01-01,“‘桑尼’梅塔,图书出版商 Knopf 的主编,去世了”
2020-01-01,“Buttigieg Campaign 在第四季度筹集了 2470 万美元”
2020-01-01,“内塔尼亚胡寻求以色列腐败指控的豁免”
2020-01-01,“FDA 禁止除烟草和薄荷醇以外的所有电子烟烟弹口味”
2020-01-01,“在加州,新年为企业带来新规”
2020-01-01,“‘渴望更少’回顾:高档紧缩”
2020-01-01,“为什么伊丽莎白沃伦想要更多的银行?”
2020-01-01,“‘仇恨犯罪’离思想犯罪只有一步之遥”
2020-01-01,“拉丁美洲的‘绿洲’陷入混乱”
2020-01-01,“Google AI 有时在乳腺癌检测方面胜过医生”
2020-01-01,“特斯拉可以保持充电吗?”
2020-01-01,“破产法院对 PG&E 债券持有人进行利率斗争的规则”
2020-01-01,“工作与家庭邮箱:Sue Shellenbarger 回答读者问题”
2020-01-01,“就业与通胀:伟大的权衡,揭秘”
2020-01-01,“约翰·斯坦贝克的情书,藏在仓库里的宝藏终于被打开了”
2020-01-01,“格特鲁德·希梅尔法布”
2020-01-01,“Chuck Peddle 的 25 美元微处理器点燃了计算机市场”
2020-01-01,“照片:伊拉克人反抗美国时的火灾、烟雾和浩劫”
2020-01-01,“2020年世界各地的狂欢者”
2020-01-01,《2020愿景:新的一年,新的音乐》
2020-01-01,“能源生产商必须为页岩钻探富矿买单”
2020-01-01,“英式足球不能停止谈论腋窝”
2020-01-01,《中国货币政策进入新的一年》
2020-01-01,“我们吓坏了。” 澳大利亚火灾季节死亡人数上升。”
2020-01-01,“决定少吃肉之前要知道什么”
2020-01-01,“最新消息:商业与金融”
2020-01-01,“最新消息:全球”
2020-01-01,“雅兹迪幸存者是将伊斯兰国成员绳之以法的关键”
2020-01-01,“香港抗议者要求新年决议”
2020-01-01,“抗议者从美国驻伊拉克大使馆撤退”
2020-01-01,“本交易所仅在周一交易”
2020-01-01,“朝鲜领导人的警告发出更加艰难的外交努力”
2020-01-01,《豪宅开发商翻开旧报纸总部的一页》
2020-01-01,“风起云涌的美国铁路公司寻求国会的绿灯”
2020-01-01,《2019年顶级艺人重播的歌曲》
2020-01-01,“特朗普动荡的一年,从政策胜利到弹劾”
2020-01-01,“日本‘失去的十年’的教训”
2020-01-01,“唐·拉森,唯一一款完美世界系列游戏,享年90岁”
2020-01-02,“更正与放大”
2020-01-03,“诗人为新的一年献上一个深情、精神的开始”
2020-01-04,“奥地利保守党和绿党组成联合政府”
2020-01-05,“牛市进入2020年”
2020-01-06,“医院合并。质量没有提高。”
2020-01-07,“前NBA总裁大卫·斯特恩去世”
2020-01-08,“‘Sonny’ Mehta,图书出版商 Knopf 的主编,去世了”
2020-01-09,“Buttigieg Campaign 在第四季度筹集了 2470 万美元”
2020-01-10,“内塔尼亚胡寻求以色列腐败指控的豁免”
2020-01-11,“FDA 禁止除烟草和薄荷醇以外的所有电子烟烟弹口味”
2020-01-12,“在加州,新年为企业带来新规”
2020-01-13,“‘渴望更少’回顾:高档紧缩”
2020-01-14,“为什么伊丽莎白沃伦想要更多的银行?”
2020-01-15,“‘仇恨犯罪’离思想犯罪只有一步之遥”
2020-01-16,“拉丁美洲的‘绿洲’陷入混乱”
2020-01-17,“Google AI 有时在乳腺癌检测方面胜过医生”
2020-01-18,“特斯拉可以保持充电吗?”
2020-01-19,“破产法院对 PG&E 债券持有人进行利率斗争的规则”
2020-01-20,“工作与家庭邮箱:Sue Shellenbarger 回答读者问题”
2020-01-21,“就业与通胀:伟大的权衡,揭秘”
2020-01-22,“约翰·斯坦贝克的情书,藏在仓库里的宝藏终于被打开了”
2020-01-23,“格特鲁德·希梅尔法布”
2020-01-24,“Chuck Peddle 的 25 美元微处理器点燃了计算机市场”
2020-01-25,“照片:伊拉克人反抗美国时的火灾、烟雾和浩劫”
2020-01-26,“2020年世界各地的狂欢者”
2020-01-27,《2020愿景:新的一年,新的音乐》
2020-01-28,“能源生产商必须为页岩钻探富矿买单”
2020-01-29,“英式足球不能停止谈论腋窝”
2020-01-30,《中国货币政策进入新的一年》
2020-01-31,“我们吓坏了。” 澳大利亚火灾季节死亡人数上升。”
2020-02-01,“决定少吃肉之前要知道什么”
2020-02-02,“最新消息:商业与金融”
2020-02-03,“最新消息:全球”
2020-02-04,“雅兹迪幸存者是将伊斯兰国成员绳之以法的关键”
2020-02-05,“香港抗议者要求新年决议”
2020-02-06,“抗议者从美国驻伊拉克大使馆撤退”
2020-02-07,“本交易所仅在周一交易”
2020-02-08,“朝鲜领导人的警告发出更加艰难的外交努力”
2020-02-09,《豪宅开发商翻开旧报纸总部的一页》
2020-02-10,“风起云涌的美国铁路公司寻求国会的绿灯”
2020-02-11,《2019年顶级艺人重播的歌曲》
2020-02-12,“特朗普动荡的一年,从政策胜利到弹劾”
2020-02-13,“日本‘失去的十年’的教训”
解决方案
好的,我有点让它工作了:
from bs4 import BeautifulSoup as bs
import requests
import datetime
from datetime import timedelta
from datetime import date
import time
from time import sleep
base_url = 'https://www.wsj.com/news/archive/'
startDate = date(2016, 1, 1)
endDate = date(2020, 1, 4)
delta = timedelta(days=1)
while startDate <= endDate:
try:
url_template = base_url + startDate.strftime("%Y%m%d")
url = url_template
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'})
content = bs(response.content, "html.parser")
headlines = content.find_all("h3")
for headline in headlines:
title = headline.find("a").text
print(str(startDate) + ',"' + title + '"')
except Exception as e:
startDate += delta
sleep(2)
continue
推荐阅读
- javascript - 从动态字符串中提取数字
- python - AttributeError:“DirectoryIterator”对象没有属性“形状”Tensorflow CNN
- javascript - TypeError:升级到节点 10 后无法读取 Firebase 函数中未定义的属性“名称”
- cognos - 如何解决我在 Cognos Report Studio 中创建的表达式的错误
- python - find_peaks() 把峰放在了正确的地方,但是把图挤到了左边
- android - 无法在 Android 10 设备上使用 ADB shell 将应用程序设置为设备所有者 (DO)
- r - 如何处理效果函数中的 NA 值?
- awk - awk 行大于特定值并在输出中包含文件名
- java - OpenCV Android Studio Java IP 摄像头未连接
- c# - EF Core:删除迁移中意外创建的列