有時在看科技新聞收集新情報,覺得一頁一頁翻實在太慢
不如用爬蟲把標題一次抓下來,然後CRTL+F找想要看的東西
例如CRTL+F找google,然後這樣是不是比較快!?
既然想到了,就用python完成吧
首先下載ipython notebook,再下載Beautifulsoup套件
然後觀察...
如果用Chrome的插件,InfoLite去分析cnbc的technology,發現新聞有二塊
第一塊是在#feature內
第二塊在#pipeline內
又發現這個標題都在div a裡面
所以就在.headline的loop內,使用get去爬裡面包含a的東東
import requests
from bs4 import BeautifulSoup
res =
requests.get("http://www.cnbc.com/technology/")
for item in soup.select('#pipeline'):
   
print item.select('a')
這樣會發現html標籤含a的全都爬了下來
但因為我只要字,所以在print item.select('a')後面加了[0].text,這樣只會爬第一個標題的字
後來發現換頁時,Request URL會出現http://www.cnb.com/technology/?page=2
此時,寫下第一個loop,因為引號裡面會變字串,所以我把i加了一個str()
import
requests
from
bs4 import BeautifulSoup
i =
1
while
i < 10:
    res =
requests.get("http://www.cnbc.com/technology/?page="+ str(i))
    soup = BeautifulSoup(res.text)
    for item in soup.select('#pipeline'):
        print item.select('.headline')[3].text
        i += 1    
寫第二個loop,以下是完成版本
import
requests
from
bs4 import BeautifulSoup
i =
1
while
i < 10: #我要爬10頁!!!
    res =
requests.get("http://www.cnbc.com/technology/?page="+ str(i))
    soup = BeautifulSoup(res.text)
    for item in soup.select('#pipeline'):
        j = 0
        while j < 20: #每一頁最多只有20條
            print
item.select('.headline')[j].text
            j += 1
        i += 1    
接著,就是存到txt檔裡頭
import
requests
from
bs4 import BeautifulSoup
f =
open('C:\crawler_test.txt', 'w')
i =
1
while
i < 4:
    res =
requests.get("http://www.cnbc.com/technology/?page="+ str(i))
    soup = BeautifulSoup(res.text)    
    for item in soup.select('#pipeline'):
        j = 0
        while j < 10:
            print
item.select('.headline')[j].text  #為了測試有列印到螢幕
            data =
item.select('.headline')[j].text
            f.write(data +'\n')
            j += 1
        i += 1
f.close()  
發現怪怪的,為什麼會出錯咧?
詢問google大神後,它告訴我其他大大是會轉成utf-8碼解決
所以完整版長這樣,一次爬個20頁
import requests
from bs4 import BeautifulSoup
f = open('C:\crawler_test.txt',
'w')
i = 1
while i < 21:
    res =
requests.get("http://www.cnbc.com/technology/?page="+ str(i))
    soup = BeautifulSoup(res.text)    
    for item in soup.select('#pipeline'):
        j = 0
        while j < 10:
            print
item.select('.headline')[j].text #這是列印到螢幕上確定有輸出
            data =
item.select('.headline')[j].text
           
f.write(data.encode("utf-8") +'\n') #一定要變成utf-8不然會失效
            j += 1
        i += 1
f.close()  
接下來打開crawler_test.txt,直接CTRL+F找google的新聞標題
但發現這樣半人工CTRL+F有點瞎,所以
1、後面的星期x與時間是我不想要的,這要想辦法在爬蟲時解決(或其他方式??)
2、想想hadoop/spark能不能幫忙找出google的標題(或其他方式??)
3、這樣寫沒有把#feature的新聞爬下來,但其實是想讓電腦自動去找出我要的標題,所以整支程式需要修正
 
 
 
 
