|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 李冬阳 于 2017-11-30 19:56 编辑
请各位大神帮帮忙!
写一个python爬虫按关键词抓取百度新闻列表,每页20条,但是最后一页通常不足20条,结果导致我写的程序无法对最后一页进行爬取。
程序如下:
- import requests
- from bs4 import BeautifulSoup
- from datetime import datetime
- import pandas
- import re
- data=[]
- for k in range(1,36):
-
- date=[]
- media=[]
- title=[]
- link=[]
- more_link=[]
-
- newsurl='http://news.baidu.com/ns?word=%28天山股份%2C新疆天山水泥股份有限公司%29&pn='+str((k-1)*20)+'&cl=2&ct=1&tn=newsdy&rn=20&ie=utf-8&bt=1262275200&et=1451577599'
- kv={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
- res=requests.get(newsurl,headers=kv)
- res.encoding='utf-8'
- soup=BeautifulSoup(res.text,'html.parser')
- for i in range(20):
- news=soup.find_all('div',{ 'class', 'result'})[i]
-
- h3=news.find( name= "a", attrs={ "target": re.compile( "_blank")})#取出每则新闻的标题
- title.append(h3.text)
-
- m=news.find( name= "p", attrs={ "class": re.compile( "c-author")})#取出每则新闻的发布媒体
- m1=m.text.split()[0]
- media.append(m1)
-
- t=m.text.split()[1]#取出每则新闻的发布时间
- dt=datetime.strptime(t,'%Y年%m月%d日')
- d=dt.strftime('%Y-%m-%d')
- date.append(d)
-
- href=news.h3.a['href']
- link.append(href)
-
- more=news.find( name= "a", attrs={ "class": re.compile( "c-more_link")})#取出更多相关新闻链接
- if more != None:
- more0=more['href']
- more1="http://news.baidu.com"+more0
- more_link.append(more1)
- else:
- more_link.append("None")
-
- data.append((date[i], title[i], media[i],more_link[i],link[i]))
- print("第" + str(k) + "页完成")
- df=pandas.DataFrame(data)
- df.to_excel('000877天山股份.xlsx')
复制代码
提示的错误是:IndexError: list index out of range
最后一页的URL是:
http://news.baidu.com/ns?word=%28天山股份%2C新疆天山水泥股份有限公司%29&pn=680&cl=2&ct=1&tn=newsdy&rn=20&ie=utf-8&bt=1262275200&et=1451577599
最后一页只有10条新闻
请大神们帮帮我,看看怎么解决这个问题,不胜感激!
最后一页不足20条的问题我上次答过了呀
- news1=soup.find_all( 'div', class_='result')
- for i in news1:
- 提取标题
- 提取媒体
- 提取时间
复制代码
- for k in range(1,36):
-
- newsurl='http://news.baidu.com/ns?word=%28天山股份%2C新疆天山水泥股份有限公司%29&pn='+str((k-1)*20)+'&cl=2&ct=1&tn=newsdy&rn=20&ie=utf-8&bt=1262275200&et=1451577599'
- kv={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
- res=requests.get(newsurl,headers=kv)
- res.encoding='utf-8'
- soup=BeautifulSoup(res.text,'html.parser')
- news1=soup.find_all( 'div', class_='result')
- for i in news1:
- h3=i.find( name= "a", attrs={ "target": re.compile( "_blank")})#取出每则新闻的标题
- #title.append(h3.text)
-
- m=i.find( name= "p", attrs={ "class": re.compile( "c-author")})#取出每则新闻的发布媒体
- m1=m.text.split()[0]
- #media.append(m1)
-
- t=m.text.split()[1]#取出每则新闻的发布时间
- dt=datetime.strptime(t,'%Y年%m月%d日')
- d=dt.strftime('%Y-%m-%d')
- #date.append(d)
-
- href=i.h3.a['href']
- #link.append(href)
-
- more=i.find( name= "a", attrs={ "class": re.compile( "c-more_link")})#取出更多相关新闻链接
- if more != None:
- more0=more['href']
- more1="http://news.baidu.com"+more0
- #more_link.append(more1)
- else:
- more1='None'
- #more_link.append("None")
-
- data.append((d, h3.txt, more1,href))
- print("第" + str(k) + "页完成")
复制代码
|
|