Python總結-----爬蟲戰鬥篇

原理看上一篇

工具篇

Xpath Help 谷歌插件(谷歌商店你懂得)

爬取鳳凰首頁新聞

插件使用


![

提取全部修改Xpath語法即可

在python上如何使用?


代碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import requests
from lxml import etree
from lxml.html import tostring#將某個元素節點 保存爲字符串
import json


def getNews():
    
    url = 'https://news.ifeng.com/'
    html = requests.get(url=url)
    html = html.content.decode('utf-8')
    news_tree = etree.HTML(html)

    # #xpath返回一個集合數組,如果有20條,則數組的len爲20
    titles = news_tree.xpath(
        '//*[@id="root"]/div[6]/div[1]/div[5]/ul/li/a/@title')
    hrefs = news_tree.xpath('//*[@id="root"]/div[6]/div[1]/div[5]/ul/li/a/@href')
    imgs = news_tree.xpath(
        '//*[@id="root"]/div[6]/div[1]/div[5]/ul/li/a/img/@src')
    times = news_tree.xpath(
        '//*[@id="root"]/div[6]/div[1]/div[5]/ul/li/div/div/time')
    tags = news_tree.xpath(
        '//*[@id="root"]/div[6]/div[1]/div[5]/ul/li/div/div/span')



    #通過遍歷,獲得每一個的信息,然後存入字典中
    #然後存入數組,返回json數據

    array = []

    count = 0

    while (count < len(titles)):
        title = titles[count]
        link = hrefs[count]
        img = imgs[count]
        time = times[count].text
        tag = tags[count].text

        dic = {'title': title, 'href': link, 'img': img, 'time': time, 'tag': tag}
        array.append(dic)
        count = count + 1
     
    
    return json.dumps(array, ensure_ascii=False)

if __name__ == "__main__":
    jsonstring = getNews()
    print(jsonstring)

打印輸入如下:

[{
    "title": "綠地迴應被舉報高管貪腐問題:調查中 不會姑息",
    "href": "//news.ifeng.com/c/7weTelvvWbY",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/CDB7AA8A2B55483B843DAF99CE559E11_w698_h392.png",
    "time": "今天 12:05",
    "tag": "中國新聞網"
}, {
    "title": "美國抗議者在白宮外放裝屍袋辦“葬禮” 問責政府抗疫不力",
    "href": "//news.ifeng.com/c/7weTH6IwesH",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/ucms/2020_21/0370BFA6C72EAB721A55DB02731CED811930349E_w698_h392.png",
    "time": "今天 12:05",
    "tag": "環球網"
}, {
    "title": "張文宏:各地有偶發病例是大概率事件,應長期保持適當社交距離",
    "href": "//news.ifeng.com/c/7weRdCzXkJc",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/1F2D720F73E54AF8956B39DB212606C6_w690_h387.jpg",
    "time": "今天 11:37",
    "tag": "張文宏醫生"
}, {
    "title": "又美又有才,難道她就是特朗普的“完美”發言人?",
    "href": "//news.ifeng.com/c/7weRLg43Viq",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/2CB1E314289C482395DE1CD313E0CCD2_w698_h392.jpg",
    "time": "今天 11:33",
    "tag": "冰汝看美國"
}, {
    "title": "美國傳染病專家福奇兩週未接受採訪,美媒懷疑其被禁聲",
    "href": "//news.ifeng.com/c/7weOmUniq6O",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/9DE3F1B1A36F4832BA4DF6D12267D80C_w698_h392.jpg",
    "time": "今天 11:15",
    "tag": "澎湃新聞"
}, {
    "title": "酒駕致廣東援鄂醫生王爍殉職案開庭 被告曾以涉嫌交通肇事罪被批捕",
    "href": "//news.ifeng.com/c/7wePraJu7kG",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/3968E83E17854629AC6BDEE647F8C3B4_w698_h392.png",
    "time": "今天 11:10",
    "tag": "南方都市報"
}, {
    "title": "全國政協會議將爲抗疫犧牲烈士和逝世同胞默哀一分鐘",
    "href": "//news.ifeng.com/c/7wePxtxWRZA",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/4F5C7FED0DA045EE96DDD311B4542436_w533_h299.jpg",
    "time": "今天 11:09",
    "tag": "工人日報"
}, {
    "title": "全國人大代表姚勁波:降低公積金繳存比例,減輕企業經營負擔",
    "href": "//news.ifeng.com/c/7wePkyXwfho",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/ucms/2020_21/740C78C4AE2878A548CAFB829EA511B7B5405646_w698_h392.jpg",
    "time": "今天 11:08",
    "tag": "澎湃新聞網"
}, {
    "title": "人民日報:把“黑暴”趕出香港,得從根上拔除“毒瘤”",
    "href": "//news.ifeng.com/c/7wePQZK5wUS",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/07991C78F2EA42DB85E525BE4E847C6F_w600_h336.jpg",
    "time": "今天 11:05",
    "tag": "人民日報"
}, {
    "title": "華爲美國高管:美國斷供我們能挺過去,不過大量美國人會失業",
    "href": "//news.ifeng.com/c/7wePHsPV6UC",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/01D0AD2B338D469286850CC5CD8F19AE_w569_h319.jpg",
    "time": "今天 11:04",
    "tag": "環球網"
}, {
    "title": "人大代表建議:取消生育三孩以上的處罰政策 國家給予育兒補貼",
    "href": "//news.ifeng.com/c/7weNTNgpLOi",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/ucms/2020_21/630A01F7A7A78464A6D06536A6A6873858EFD058_w698_h392.jpg",
    "time": "今天 11:00",
    "tag": "新京報"
}, {
    "title": "瘋狂的頭盔:我10天賺了800萬",
    "href": "//news.ifeng.com/c/7weOSjP6hN2",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/9CCED3FB9DFF4554B5C9F9FC4599B608_w512_h287.jpg",
    "time": "今天 10:53",
    "tag": "縱相新聞"
}, {
    "title": "美國加州聯邦參議員提議案 譴責“中國病毒”等詞彙指稱新冠",
    "href": "//news.ifeng.com/c/7weNkE8jFA0",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/FF274567E4C0492496E65C1ECF119A87_w698_h392.jpg",
    "time": "今天 10:44",
    "tag": "中國日報網"
}, {
    "title": "王學坤委員:建議建立農民退休制度  讓65歲以上農民“洗腳上田,老有所養”",
    "href": "//news.ifeng.com/c/7weNbtSo7v6",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/75DF69024398483AAA24F657C0EC764F_w602_h338.png",
    "time": "今天 10:39",
    "tag": "最高人民檢察院"
}, {
    "title": "特朗普叫囂“中國有個瘋子”,評論區翻車",
    "href": "//news.ifeng.com/c/7weN4fqF7BI",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/4969C19002F340678BCC48B9266B1D2C_w698_h392.jpg",
    "time": "今天 10:32",
    "tag": "觀察者網"
}, {
    "title": "軍報頭版評論:“蓬佩奧們”邊喊抓賊邊做賊,下場註定可悲",
    "href": "//news.ifeng.com/c/7weMvlBWShM",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/636D31AEB733412F96581882FCEFC64E_w698_h392.png",
    "time": "今天 10:31",
    "tag": "解放軍報"
}, {
    "title": "特殊時期的中國兩會 外媒都在關注這些",
    "href": "//news.ifeng.com/c/7weMghINhz6",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/D4270B52C0C14B72909202DBABECE1B6_w698_h392.jpg",
    "time": "今天 10:28",
    "tag": "央視新聞客戶端"
}, {
    "title": "雷軍建議:進一步降低民營企業進入衛星互聯網門檻",
    "href": "//news.ifeng.com/c/7weL0NllooO",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/ucms/2020_21/AB6E6070DCCBE7465220469B2578CD910EA67390_w698_h392.jpg",
    "time": "今天 10:20",
    "tag": "澎湃新聞"
}, {
    "title": "北京15座王府14座被佔,政協委員:應設騰退協調機構",
    "href": "//news.ifeng.com/c/7weKz9vBGm5",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/ucms/2020_21/429BCCAD3FC016669563C909F36859F71B506DE0_w698_h392.jpg",
    "time": "今天 10:20",
    "tag": "新京報"
}, {
    "title": "荷蘭政府:水貂可能將新冠病毒傳給人  清查所有養殖場",
    "href": "//news.ifeng.com/c/7weKeI1Yr6D",
    "img": "//d.ifengimg.com/w144_h80_q70/x0.ifengimg.com/thmaterial/2020_21/09FBF81BFE594527AAF2C36D2ED4EEDF_w519_h291.jpg",
    "time": "今天 10:16",
    "tag": "觀察者網"
}]
如果需要新聞詳情呢:

方式一:直接在列表中返回,也就是在 getNews() 方法中,先獲取到連接 hrefs 然後遍歷鏈接 得到 href 再去重新使用 lxml 抓取,這種方式對直接返回給客戶端使用不是很友好,一個是返回 json 體積過大,一個是等待時間過長

方式二:重寫抓取函數,傳入相對應頁面的 URL 獲取詳情數據代碼如下:

def getNewsContent(url):
        
    html = requests.get(url=url)
    html = html.content.decode('utf-8')
    news_content_tree = etree.HTML(html)

    #因爲xpath 語法可以保證只獲取一個詳情元素,所以直接取第一個即可
    content = news_content_tree.xpath(
        '//*[@id="root"]/div/div[3]/div[1]/div[1]/div[3]')[0]

    content_html = str(tostring(content))
    #如果打印 會發現 前面有一個(b') 以及最後的 (') 所以直接執行切割字符串操作
    content_html_text = content_html[2:len(content_html)-1]

    return content_html_text

打印數據如下:

<div class="main_content-LcrEruCc"><div><div class="text-3zQ3cZD4"><p>&#36817;&#26085;&#65292;21&#23681;&#30340;&#20924;&#22025;&#35946;&#22240;&#26292;&#21160;&#32618;&#34987;&#39321;&#28207;&#27861;&#38498;&#21028;&#21009;4&#24180;&#65292;&#20182;&#22312;&#27714;&#24773;&#20449;&#20013;&#35828;&#65306;&#8220;&#27809;&#26377;&#19968;&#22825;&#19981;&#21518;&#24724;&#8221;&#12290;2019&#24180;6&#26376;&#33267;2020&#24180;4&#26376;15&#26085;&#65292;8001&#20154;&#34987;&#25429;&#65292;1365&#20154;&#34987;&#36215;&#35785;&#65292;566&#20154;&#34987;&#25511;&#26292;&#21160;&#32618;&#12290;&#20010;&#20307;&#30340;&#24754;&#21095;&#36824;&#22312;&#25345;&#32493;&#19978;&#28436;&#65292;&#25968;&#23383;&#30340;&#25578;&#24515;&#35753;&#20154;&#25345;&#20037;&#38590;&#24179;&#65292;&#19968;&#22330;&#8220;&#20462;&#20363;&#39118;&#27874;&#8221;&#36896;&#23601;&#30340;&#26292;&#21147;&#26059;&#28065;&#65292;&#24050;&#35753;&#22810;&#23569;&#39321;&#28207;&#24180;&#36731;&#20154;&#21629;&#36816;&#33073;&#36712;&#12289;&#21069;&#36884;&#27585;&#24323;&#12290;</p><p>&#26366;&#32463;&#25317;&#26377;&#30340;&#19996;&#35199;&#22240;&#20026;&#21442;&#19982;&#38750;&#27861;&#26292;&#21147;&#27963;&#21160;&#32780;&#20007;&#22833;&#65292;&#19968;&#30452;&#25317;&#26377;&#30340;&#29983;&#27963;&#22240;&#20026;&#26292;&#21147;&#30772;&#22351;&#32780;&#27490;&#27493;&#65292;&#29422;&#23376;&#23665;&#19979;&#30340;&#32439;&#20081;&#20260;&#23475;&#20102;&#22810;&#23569;&#36880;&#26790;&#36335;&#19978;&#30340;&#20154;&#12290;&#22238;&#26395;&#39321;&#28207;&#8220;&#20462;&#20363;&#39118;&#27874;&#8221;&#65292;&#27491;&#26159;&#22240;&#20026;&#21453;&#20013;&#20081;&#28207;&#20998;&#23376;&#40723;&#21561;&#26292;&#21147;&#12289;&#29053;&#24785;&#26292;&#21147;&#65292;&#34987;&#27927;&#33041;&#30340;&#24180;&#36731;&#20154;&#36855;&#20449;&#26292;&#21147;&#12289;&#20351;&#29992;&#26292;&#21147;&#65292;&#39321;&#28207;&#25165;&#32467;&#20986;&#20102;&#23401;&#23376;&#26377;&#23478;&#38590;&#22238;&#12289;&#26377;&#26790;&#38590;&#22278;&#65292;&#24066;&#27665;&#26377;&#24037;&#38590;&#24320;&#12289;&#26080;&#24037;&#21487;&#24320;&#30340;&#33510;&#26524;&#65292;&#35753;&#32321;&#33635;&#31283;&#23450;&#30340;&#39321;&#28207;&#38519;&#20837;&#21361;&#26426;&#22256;&#22659;&#12290;</p><p><img src="https://x0.ifengimg.com/ucms/2020_21/A1688E829DE205EEBC309384E3783FE8BA15437D_w1080_h1920.jpg"></p><p>&#36825;&#26159;&#39321;&#28207;&#24066;&#27665;&#24819;&#35201;&#30340;&#21527;&#65311;&#26368;&#22522;&#26412;&#30340;&#23433;&#20840;&#34987;&#21093;&#22842;&#65292;&#20986;&#34892;&#24597;&#26377;&#20154;&#21448;&#21435;&#30776;&#22320;&#38081;&#65292;&#33829;&#19994;&#24597;&#40657;&#34915;&#20154;&#21448;&#26469;&#25171;&#30776;&#65292;&#39277;&#26700;&#19978;&#26377;&#19981;&#21516;&#25919;&#35265;&#20063;&#19981;&#25954;&#36731;&#26131;&#21457;&#34920;&#65292;&#26657;&#22253;&#37324;&#31455;&#25104;&#20102;&#8220;&#20853;&#24037;&#21378;&#8221;&#65307;&#20154;&#34987;&#36148;&#19978;&#26631;&#31614;&#65292;&#24215;&#34987;&#36148;&#19978;&#26631;&#31614;&#65292;&#34987;&#36215;&#24213;&#12289;&#34987;&#25490;&#26021;&#12289;&#34987;&#25915;&#20987;&#65292;&#22312;&#25152;&#35859;&#8220;&#31169;&#20102;&#8221;&#21644;&#8220;&#35013;&#20462;&#8221;&#20043;&#19979;&#65292;&#40657;&#33394;&#24656;&#24598;&#30340;&#21033;&#20995;&#25139;&#36827;&#24066;&#27665;&#30340;&#24515;&#65292;&#35753;&#20154;&#26222;&#36941;&#21464;&#24471;&#28966;&#34385;&#12289;&#24656;&#24807;&#12290;&#22240;&#20026;&#26292;&#24466;&#65292;&#20010;&#20154;&#36825;&#23567;&#23478;&#34987;&#40657;&#26263;&#21253;&#35065;&#65292;&#22240;&#20026;&#26292;&#21147;&#65292;&#39321;&#28207;&#36825;&#20010;&#22823;&#23478;&#24050;&#28385;&#30446;&#30126;&#30157;&#65292;&#24590;&#33021;&#19981;&#35753;&#20154;&#24515;&#30171;&#12289;&#19981;&#35753;&#20154;&#24868;&#24936;&#65292;&#19981;&#35753;&#20154;&#26399;&#30460;&#39321;&#28207;&#37325;&#24402;&#31077;&#21644;&#23433;&#23450;&#65281;</p><p>&#22312;&#8220;&#20462;&#20363;&#39118;&#27874;&#8221;&#20013;&#65292;&#20154;&#20204;&#24050;&#32463;&#30475;&#23613;&#26292;&#21147;&#30340;&#21361;&#23475;&#12289;&#26292;&#24466;&#30340;&#20982;&#27531;&#12290;&#29305;&#21306;&#25919;&#24220;&#35686;&#21153;&#22788;&#22788;&#38271;&#37011;&#28851;&#24378;&#27492;&#21069;&#34920;&#31034;&#65292;&#39321;&#28207;&#27491;&#38754;&#20020;&#26412;&#22303;&#24656;&#24598;&#20027;&#20041;&#30340;&#23041;&#32961;&#65292;&#23041;&#32961;&#21040;&#39321;&#28207;&#24066;&#27665;&#30340;&#20154;&#36523;&#23433;&#20840;&#65292;&#20063;&#22312;&#23545;&#22269;&#23478;&#23433;&#20840;&#36896;&#25104;&#20914;&#20987;&#12290;&#21453;&#26292;&#21147;&#65292;&#26159;&#22240;&#20026;&#26292;&#21147;&#24050;&#28183;&#36879;&#36827;&#39321;&#28207;&#24066;&#27665;&#30340;&#26085;&#24120;&#29983;&#27963;&#65292;&#21361;&#38505;&#36817;&#22312;&#21675;&#23610;&#65307;&#26159;&#22240;&#20026;&#26292;&#21147;&#36824;&#26377;&#24310;&#32493;&#12289;&#25193;&#25955;&#21644;&#21319;&#32423;&#30340;&#21487;&#33021;&#65292;&#35201;&#25703;&#27585;&#23478;&#22253;&#65307;&#26159;&#22240;&#20026;&#26292;&#21147;&#19981;&#27490;&#65292;&#26292;&#24466;&#23558;&#26356;&#21152;&#29462;&#29378;&#65292;&#21453;&#20013;&#20081;&#28207;&#20998;&#23376;&#23558;&#26356;&#21152;&#22179;&#24352;&#65292;&#39321;&#28207;&#35201;&#33900;&#36865;&#25481;&#19968;&#20195;&#20195;&#20154;&#36763;&#33510;&#24314;&#31435;&#30340;&#22522;&#19994;&#65292;&#36745;&#29004;&#31687;&#31456;&#34987;&#24656;&#24598;&#20027;&#20041;&#28270;&#28781;&#12290;</p><p>&#36890;&#36807;&#39321;&#28207;&#35686;&#26041;&#20005;&#27491;&#25191;&#27861;&#65292;&#39321;&#28207;&#26292;&#24466;&#30340;&#27668;&#28976;&#24050;&#34987;&#21387;&#21046;&#65307;&#30001;&#20110;&#39321;&#28207;&#24066;&#27665;&#25317;&#25252;&#27490;&#26292;&#21046;&#20081;&#65292;&#39321;&#28207;&#26292;&#21147;&#30340;&#22303;&#22756;&#27491;&#34987;&#36880;&#27493;&#38130;&#38500;&#12290;&#20294;&#21457;&#29983;&#22312;&#39321;&#28207;&#30340;&#26292;&#21147;&#24182;&#26410;&#32477;&#36857;&#65292;&#34850;&#34850;&#27442;&#21160;&#30340;&#26292;&#24466;&#36824;&#22312;&#20282;&#26426;&#32780;&#21160;&#12290;5&#26376;&#20221;&#21069;&#21518;&#65292;&#20154;&#20204;&#21448;&#30475;&#21040;&#20102;&#26292;&#24466;&#25237;&#25527;&#30340;&#29123;&#28903;&#24377;&#65292;&#30475;&#21040;&#20102;&#26292;&#24466;&#23492;&#20986;&#30340;&#24656;&#21523;&#37038;&#20214;&#12290;&#39321;&#28207;&#24066;&#27665;&#38656;&#35201;&#24378;&#21270;&#20849;&#35782;&#65292;&#19968;&#36215;&#21521;&#26292;&#21147;&#35828;&#19981;&#65307;&#39321;&#28207;&#35686;&#26041;&#38656;&#35201;&#20877;&#25509;&#20877;&#21385;&#65292;&#19981;&#32473;&#26292;&#24466;&#20219;&#20309;&#21912;&#24687;&#20043;&#26426;&#12290;&#26356;&#38656;&#20174;&#26681;&#26412;&#19978;&#24819;&#21150;&#27861;&#65292;&#26681;&#27835;&#8220;&#40657;&#26292;&#8221;&#36825;&#20010;&#27602;&#30244;&#12290;&#21482;&#26377;&#35753;&#26292;&#24466;&#12289;&#26292;&#21147;&#25104;&#36807;&#34903;&#32769;&#40736;&#12289;&#20247;&#30690;&#20043;&#30340;&#65292;&#32437;&#26292;&#12289;&#26045;&#26292;&#30340;&#20154;&#20184;&#20986;&#27785;&#37325;&#30340;&#20195;&#20215;&#65292;&#39321;&#28207;&#25165;&#26377;&#23681;&#26376;&#38745;&#22909;&#65292;&#24066;&#27665;&#25165;&#33021;&#23433;&#24515;&#29983;&#27963;&#12290;</p></div><span></span><div class="end-37GBinZ_"></div></div></div>

原理看上一篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章