1. 程式人生 > >python爬取百度新聞所有的新聞的前1頁 標題和URL地址

python爬取百度新聞所有的新聞的前1頁 標題和URL地址

這是我自己寫的一個爬取百度新聞的一個程式碼,歡迎大家多來討論,謝謝!(自己已經測試可以使用,在文章最後見效果圖)

'''
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)

效果圖