学习笔记整理:
1. 异常情况处理和连续收集
有时信息收集时会发生失败的情况,但为了不影响后续,可以在代码中加入try: except: 可以有效避免这种情况的发生。如果需要24小时不间断收集,可以把实现函数放在while True的循环语句中,这样的话信息收集可以持续更迭。当然这样收集有点浪费资源,所以可以在代码中设置每间隔多长时间收集一次。实现代码如下:
while True: # 一直运行的意思
companys = ['华能信托', '阿里巴巴', '万科集团', '百度集团', '腾讯', '京东']
for i in companys:
try:
baidu(i)
print(i + '百度新闻爬取成功')
except:
print(i + '百度新闻爬取失败')
time.sleep(3600) # 每3600秒运行一次,即3小时运行一次,注意缩进
2. 收集多页新闻
此功能的实现,需要在源代码基础上修改三个地方:1. 在原函数中多加入一个参数page 2. 在主体部分加入围绕页面的循环语句3. 避免收集失败,可以在主体第二层循环中加入间隔时间time.sleep,即每收集完一个公司的信息休息几秒再收集下个公司。实现代码如下:
# 爬取多个公司的多页, 可以给函数传入两个参数,供参考
def baidu(company, page):
num = (page - 1) * 10 # 参数规律是(页数-1)*10
url = 'https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=' + company + '&pn=' + str(num)
res = requests.get(url, headers=headers).text
companys = ['华能信托', '阿里巴巴', '万科集团', '百度集团', '腾讯', '京东']
for company in companys:
for i in range(10): # 这里一共爬取了10页
baidu(company, i+1) # i是从0开始的序号,所以要写成i+1表示第几页
print(company + '第' + str(i+1) + '页爬取成功') # i是从0开始的序号,所以写i+1
time.sleep(3) # 爬太快会被百度反爬