首页 > 解决方案 > 使用 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,“日本‘失去的十年’的教训”

标签: pythonloopsweb-scrapingbeautifulsoup

解决方案


好的,我有点让它工作了:

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

推荐阅读