python爬取百度新聞所有的新聞的前1頁 標題和URL地址
阿新 • • 發佈:2019-02-16
這是我自己寫的一個爬取百度新聞的一個程式碼,歡迎大家多來討論,謝謝!(自己已經測試可以使用,在文章最後見效果圖)
'''
re模板:2.2.1
requests模板:2.18.4
bs4模板:4.6.0
json模板:2.0.9
爬取百度新聞所有的新聞的前1頁 標題和URL地址
'''
import requests
import json
from bs4 import BeautifulSoup
import re
#獲得每頁新聞標題和新聞地址
def getPageInfo(url,page):
newurl=url + str(page)
res = requests.get(newurl)
jd = json.loads(res.text)
list1 = jd['data' ]['list']
it = iter(list1)
for one in it:
print("\t新聞標題="+one['title']+"\t"+"新聞地址="+one['url'])
#獲得各個種類的新聞資訊
def getInfo(classInfo):
print("種類是:"+classInfo)
#當種類為 “推薦” 的時候他的url和其他的種類URL不一樣,所以單獨處理
if classInfo == '推薦':
url = 'http://jian.news.baidu.com/ajax/list?type=chosen/推薦&pn='
getPageInfo(url,1)
else:
url = 'http://jian.news.baidu.com/ajax/list?type=info/{}&pn='.format(classInfo)
#print(url)
#這裡取的是分頁資訊 我只取了前4頁 取分頁資訊在這裡修改
for page in range(1,2):
getPageInfo(url,page)
#獲得新聞的種類
def getClassInfo():
list2 = []
res = requests.get('http://jian.news.baidu.com/' )
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')
data = soup.select('script')[2].text
#下面用了正則表示式來替換,為了得到我們想要的資料
sea = re.sub('\s',"",data)
sea = sea.rstrip("window.menulist=menulist;")
ss = re.sub('varmenulist=\[\];',"",sea)
#print(ss)
ss = re.sub('menulist.push\(',"",ss)
ss = re.sub('\);',";",ss)
ss = re.sub('\)',"",ss)
ss = re.sub('\'',"\"",ss)
list1 = ss.split(';')
#print(list1)
it = iter(list1)
for one in it:
#print(one)
jd = json.loads(one)
#print(type(jd))
#print(jd['topic'])
list2.append(jd['topic'])
return list2
listt = getClassInfo()
it = iter(listt)
for one in it:
getInfo(one)