第一只可愛滴小爬蟲

使用BeautifulSoup入門源碼
視頻地址

使用python2.7
使用Chrome網(wǎng)頁,右鍵檢查工具獲取需要內(nèi)容的類或者id

#coding=utf-8
import requests #網(wǎng)絡(luò)請(qǐng)求
from bs4 import BeautifulSoup#網(wǎng)頁元素解析
import json#json數(shù)據(jù)解析
import re#正則表達(dá)式
import time#延時(shí)
import pandas#數(shù)據(jù)分析
import sqlite3#數(shù)據(jù)存儲(chǔ)

#newsurl = "http://news.sina.com.cn/china"

#獲取評(píng)論數(shù)
common_js = "http://comment5.news.sina.com.cn/page/info?version=1&format=json&channel=gn&newsid=comos-{}&group=undefined&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=3&t_size=3&h_size=3&thread=1&callback=jsonp_1517920852693&_=1517920852693"

#獲取評(píng)論數(shù)
def getNewsConmmontUrl(new_url):
#    news_id = sub_url.split("/")[-1].strip("doc-i").rstrip(".shtml")
    #print(news_id)
    news_id = re.search("doc-i(.+).shtml",new_url).group(1) #使用正則獲取新聞id
    res = requests.get(common_js.format(news_id))
    response = res.text.strip("jsonp_1517920852693(")[:-1]
    jd = json.loads(response)
    if jd["result"] != None and jd["result"]["count"] != None and jd["result"]["count"]["total"]:
        return jd["result"]["count"]["total"]
    return 0

#獲取文章詳情
def getNewsDetail(sub_new_url):
    result = {}
    res = requests.get(sub_new_url)
    soup = BeautifulSoup(res.text.encode(res.encoding).decode('utf-8'),"lxml")#lxml是編譯器類型漩符,也可指定html.parser
    result["articleUrl"] = sub_new_url;
    result["articleTitle"] = soup.select(".main-title")[0].text#文章標(biāo)題
    result["articleTime"] = soup.select(".date-source")[0].select("span")[0].text#時(shí)間
    result["articleContent"] = "\n".join([p.text.strip() for p in soup.select("#article p")[:-1]]) #文章內(nèi)容
    result["articleAuthor"] = soup.select(".show_author")[0].text#作者
    result["articleComment"] = getNewsConmmontUrl(sub_new_url)#評(píng)論
    if len(soup.select(".img_wrapper")) > 0:
        result["articlePicture"] = soup.select(".img_wrapper")[0].select("img")[0]["src"]#文章圖片
    return result

#分頁鏈接請(qǐng)求
#page_common_url = "http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page={}&callback=newsloadercallback&_=1518067220351"

page_common_url = "http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page={}&callback=newsloadercallback"

#獲取分頁數(shù)據(jù)
def getPageDataList(pageIndex):

    page_url = page_common_url.format(pageIndex)#填充url
    page_url_request = requests.get(page_url)#請(qǐng)求數(shù)據(jù)
    page_url_jd = json.loads(page_url_request.text.lstrip("  newsloadercallback(").rstrip(");"))#解析數(shù)據(jù)
    sub_url_array = []
    for sub_item in page_url_jd["result"]["data"]:
        sub_url = sub_item["url"]
        if sub_url.find("http") != -1:#判斷是否是http開頭的url
            sub_url_array.append(sub_url)
    return sub_url_array#新聞url列表

#獲取前2頁新聞鏈接URL
def getTotalNewUrlList():

    sub_url_total_array = []
    for i in (0,2):
        sub_url_total_array.extend(getPageDataList(i))#extend可將數(shù)組中的數(shù)據(jù)一個(gè)一個(gè)的添加進(jìn)入列表荒吏,append是將數(shù)組作為一個(gè)元素添加到列表
    return sub_url_total_array#列表沾谜,存放所有文章url

#獲取所有文章內(nèi)容
def getTotalNewsDetail():
    total_detail_list = []
    for sub_total_url in getTotalNewUrlList():#通過分頁獲取所有新聞鏈接
        resultDic = getNewsDetail(sub_total_url)#獲取鏈接詳情字典
        time.sleep(1)#爬蟲盡量多的延時(shí)膊毁,也可訪問網(wǎng)站的robots.txt查看是否允許爬蟲及爬蟲的時(shí)間,網(wǎng)站架構(gòu)基跑。婚温。。
        for i in resultDic:
            print(resultDic[i])#打印文章詳情
        total_detail_list.append(resultDic)#添加詳情字典到列表
    return total_detail_list

#使用sqlite存儲(chǔ)數(shù)據(jù)媳否,pandas清晰展示數(shù)據(jù)
def write_data(total_news):
    df = pandas.DataFrame(total_news)#將數(shù)據(jù)放入pandas中
    with sqlite3.connect('news.sqlite') as db:
        df.to_sql('news', con = db)#將df數(shù)據(jù)寫入數(shù)據(jù)庫

#讀取數(shù)據(jù)
def read_data():
    with sqlite3.connect('news.sqlite') as db:
        df = pandas.read_sql_query('select * from news', con = db)#將數(shù)據(jù)庫數(shù)組讀出
        print(df)

#入口函數(shù)
def main():
    total_news = getTotalNewsDetail()#列表栅螟,獲取新聞詳情
    write_data(total_news)#寫入數(shù)據(jù)庫
    read_data()#從數(shù)據(jù)庫讀取并打印

if __name__ == '__main__':
    main()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市篱竭,隨后出現(xiàn)的幾起案子力图,更是在濱河造成了極大的恐慌,老刑警劉巖掺逼,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃媒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吕喘,警方通過查閱死者的電腦和手機(jī)赘那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氯质,“玉大人募舟,你說我怎么就攤上這事∥挪欤” “怎么了胃珍?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜓陌。 經(jīng)常有香客問我,道長(zhǎng)吩蔑,這世上最難降的妖魔是什么钮热? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮烛芬,結(jié)果婚禮上隧期,老公的妹妹穿的比我還像新娘。我一直安慰自己赘娄,他們只是感情好仆潮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遣臼,像睡著了一般性置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揍堰,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天鹏浅,我揣著相機(jī)與錄音嗅义,去河邊找鬼。 笑死隐砸,一個(gè)胖子當(dāng)著我的面吹牛之碗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播季希,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼褪那,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了式塌?” 一聲冷哼從身側(cè)響起博敬,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎珊搀,沒想到半個(gè)月后冶忱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡境析,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年囚枪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劳淆。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡链沼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沛鸵,到底是詐尸還是另有隱情括勺,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布曲掰,位于F島的核電站疾捍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栏妖。R本人自食惡果不足惜乱豆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吊趾。 院中可真熱鬧宛裕,春花似錦、人聲如沸论泛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屁奏。三九已至岩榆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朗恳。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工湿颅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粥诫。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓油航,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親怀浆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谊囚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 聲明:本文講解的實(shí)戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流执赡,請(qǐng)勿用于任何商業(yè)用途镰踏! 一、前言 強(qiáng)烈建議:請(qǐng)?jiān)陔娔X的陪同下沙合,閱讀本文...
    Bruce_Szh閱讀 12,707評(píng)論 6 28
  • 各位同學(xué)奠伪、朋友, 大家好首懈。我們是深泉教育绊率,一家(目前)很小的教育企業(yè),工作地點(diǎn)在南京河西萬達(dá)寫字樓B座(是的究履,裝×...
    6a48142bea13閱讀 1,066評(píng)論 0 2
  • 我把我們受過的嘲笑滤否, 鍛造成盔甲,塞進(jìn)身體里最仑。 幾年后的今天藐俺,丟盔棄甲。 看著它們微笑曬太陽泥彤, 假裝什么都沒發(fā)生欲芹。
    海韻夢(mèng)都閱讀 137評(píng)論 2 1
  • 王小欣 文靜秀氣 卻是個(gè)身高172的東北女孩,來自長(zhǎng)春吟吝,在安徽讀大學(xué)耀石,畢業(yè)之后跟我一起留在了杭州這座美麗的城市。她...
    王子小沫閱讀 266評(píng)論 0 0