1. 程式人生 > >Python爬蟲爬取網站新聞

Python爬蟲爬取網站新聞

網站分析

爬取過程

獲取新聞連結地址

使用requests包讀取新聞列表頁面,然後使用正則表示式提取出其中的新聞頁面連結,返回urls列表

def getList(url):
    li = requests.get(url)
    res = r'url":"http:.*?.html'
    urls = re.findall(res,li.text)
    for i in range(len(urls)):
        urls[i] = urls[i][6:]
    return urls

獲取新聞內容

使用requests獲取到新聞頁面的內容,然後使用BeautifulSoup包解析web內容。

def getNews(url):
    url = url[:-5]+"_0.html"
    ss = requests.get(url)
    soup = BeautifulSoup(ss.text,"html.parser")
    title = soup.title.string[:-6].encode('utf-8')
    time = soup.find("div","about").contents[0][9:].encode('utf-8')
    type = soup.find("div","position lBlue").contents[3].string.encode('utf-8'
) content = soup.find("div","content").get_text()[1:-1].encode('utf-8') news = News(title,time,type,content) return news

手機簡版新聞通常把一個新聞分成幾個頁面顯示,導致爬取內容很麻煩。經過分析發現,在新聞連結地址後加_0即可顯示全部新聞內容,所以先處理一下連結地址。然後使用requests獲取web頁面,再用BeautifulSoup提取新聞的標題,時間,類別和內容。

將結果儲存

def saveAsTxt(news):
    file = open('E:/news.txt'
,'a') file.write("標題:" + news.title + "\t時間:" + news.time + "\t型別:"+ news.type + "\t內容:"+ news.content + "\"\n")

執行程式

程式程式碼

# encoding: utf-8
import requests
import re
from bs4 import BeautifulSoup
import time

class News:
    def __init__(self,title,time,type,content):
        self.title = title  #新聞標題
        self.time = time    #新聞時間
        self.type = type    #新聞類別
        self.content = content  #新聞內容

def getList(url):   #獲取新聞連結地址
    li = requests.get(url)      
    res = r'url":"http:.*?.html'    #正則表示式獲取連結地址
    urls = re.findall(res,li.text)
    for i in range(len(urls)):
        urls[i] = urls[i][6:]
    return urls

def getNews(url):   #獲取新聞內容
    url = url[:-5]+"_0.html"    #處理連結獲取全文
    ss = requests.get(url)
    soup = BeautifulSoup(ss.text,"html.parser")     #獲取新聞內容,注意編碼
    title = soup.title.string[:-6].encode('utf-8')      
    time = soup.find("div","about").contents[0][9:].encode('utf-8')
#    type = soup.find("div","position lBlue").contents[3].string.encode('utf-8')
    content = soup.find("div","content").get_text()[1:-1].encode('utf-8')
    news = News(title,time,type,content)
    return news

def saveAsTxt(news):    #儲存新聞內容
    file = open('E:/news.txt','a')
    file.write("標題:" + news.title +
               "\t時間:" + news.time +
#               "\t型別:"+ news.type +
               "\t內容:"+ news.content  +
               "\"\n")

start = time.clock()
sum = 0
for i in range(1,40):
    wangzhi = "http://3g.163.com/touch/article/list/BA8J7DG9wangning/%s-40.html" %i
    urls = getList(wangzhi)
    sum = sum + len(urls)
#    print "當前頁解析出 %s 條" %len(urls)
    j = 1
    for url in urls:
        print "正在讀取第%s頁第%s/%s條:%s" %(i,j,len(urls),url.encode('utf-8'))
        news = getNews(url)
        saveAsTxt(news)
        j = j + 1
end = time.clock()
print "共爬取%s條新聞,耗時%f s" %(sum,end - start)

執行結果

程式執行結果
程式執行的時間主要和頁面開啟的速度有關,若網速理想的話程式執行還是挺快的。

爬取到的新聞

該程式還屬於入門級的爬蟲,代理ip池以及多執行緒效率問題都沒有涉及到。但是如果附加上你需要這些後續處理,比如
有效地儲存(資料庫應該怎樣安排)
有效地判重(這裡指網頁判重,咱可不想把人民日報和抄襲它的大民日報都爬一遍)
有效地資訊抽取(比如怎麼樣抽取出網頁上所有的地址抽取出來,“朝陽區奮進路中華道”),搜尋引擎通常不需要儲存所有的資訊,比如圖片我存來幹嘛…
及時更新(預測這個網頁多久會更新一次)
如你所想,這裡每一個點都可以供很多研究者十數年的研究。(知乎:謝科)

附錄

相關推薦

Python爬蟲——網站的例項化原始碼

缺點:1爬了一個網站好幾次以後不能再進行爬取。沒有解決這個問題 2在寫入資料的時候還是存在很大問題。以後多加練習這個檔案的儲存的相關工作 import re import urllib.request def function(): """需求:1 https://re

Python爬蟲 網站上的圖片

                                 Python爬蟲  爬取網站上的圖片  

Python爬蟲網站新聞

網站分析 爬取過程 獲取新聞連結地址 使用requests包讀取新聞列表頁面,然後使用正則表示式提取出其中的新聞頁面連結,返回urls列表 def getList(url): li = requests.get(url) re

python 爬蟲 證券之星網站

爬蟲 周末無聊,找點樂子。。。#coding:utf-8 import requests from bs4 import BeautifulSoup import random import time #抓取所需內容 user_agent = ["Mozilla/5.0 (Windows NT 10.0

Python爬蟲美劇網站

一直有愛看美劇的習慣,一方面鍛鍊一下英語聽力,一方面打發一下時間。之前是能在視訊網站上面線上看的,可是自從廣電總局的限制令之後,進口的美劇英劇等貌似就不在像以前一樣同步更新了。   但是,作為一個宅diao的我又怎甘心沒劇追呢,所以網上隨便查了一下就找到一個能用迅雷下載的美劇

python爬蟲拉勾網站內容

       本次主要內容是分享下拉勾網站模擬搜尋以及搜尋內容的爬取,這裡先引入一些用到的庫,由於網站本身的反爬蟲技術和網路原因,這裡使用了fake_useragent和多執行緒模式,當然如果有條件的話也可以使用代理池,這樣可以更加保險一點。由於我沒有弄那些收費的代理,而免費

python 爬蟲網站的漫畫

文章目錄 宣告 前言 思路 流程 程式 結果 宣告 為了表示對網站的尊重,已將網站地址隱藏,下載的漫畫之前我就看過了,所以也會刪掉,絕不侵犯網站的利益。 前言

Python爬蟲古詩文網站專案分享

作為一個靠python自學入門的菜鳥,想和大家分享自己寫的第一個也是目前為止唯一一個爬蟲程式碼 寫爬蟲要具備的能力基礎:python入門基礎,html5基礎知識,然後這邊用的是scrapy框架,所以

Python爬蟲51job招聘網站

最近學習爬蟲,做了一個python爬蟲工具寫在這裡記錄一下。# python爬51job工具,稍微改改就可以爬其他網站 # edit by mengqi Date:2018-07-11 # encoding:uft-8 import csv

使用python爬蟲百度手機助手網站中app的資料

一、爬取程式流程圖 爬蟲程式流程圖如下: Created with Raphaël 2.1.0開始分析地址結構獲得app類別頁的url爬取app詳情頁url爬取App詳情頁的資料將爬取資料儲存到json檔案結束 二、具體步驟 1.分析

Python爬蟲-糗事百科段子

hasattr com ima .net header rfi star reason images 閑來無事,學學python爬蟲。 在正式學爬蟲前,簡單學習了下HTML和CSS,了解了網頁的基本結構後,更加快速入門。 1.獲取糗事百科url http://www.qiu

python爬蟲頁面源碼在本頁面展示

一個 nts ring 想要 strip code 空白 列表 ngs python爬蟲在爬取網頁內容時,需要將內容連同內容格式一同爬取過來,然後在自己的web頁面中顯示,自己的web頁面為django框架 首先定義一個變量html,變量值為一段HTML代碼 >&

python爬蟲海量病毒文件

tle format nbsp contex logs request spl tde __name__ 因為工作需要,需要做深度學習識別惡意二進制文件,所以爬一些資源。 # -*- coding: utf-8 -*- import requests import re

Python爬蟲廣州大學教務系統的成績(內網訪問)

enc 用途 css選擇器 狀態 csv文件 表格 area 加密 重要 用Python爬蟲爬取廣州大學教務系統的成績(內網訪問) 在進行爬取前,首先要了解: 1、什麽是CSS選擇器? 每一條css樣式定義由兩部分組成,形式如下: [code] 選擇器{樣式} [/code

python爬蟲——古詩詞

爬蟲 古詩詞 實現目標 1.古詩詞網站爬取唐詩宋詞 2.落地到本地數據庫頁面分析 通過firedebug進行頁面定位: 源碼定位: 根據lxml etree定位div標簽:# 通過 lxml進行頁面分析 response = etree.HTML(data

利用Python爬蟲淘寶商品做數據挖掘分析實戰篇,超詳細教程

實戰 趨勢 fat sts AI top 名稱 2萬 安裝模塊 項目內容 本案例選擇>> 商品類目:沙發; 數量:共100頁 4400個商品; 篩選條件:天貓、銷量從高到低、價格500元以上。 項目目的 1. 對商品標題進行文本分析 詞雲可視化 2.

Python爬蟲 - 百度html代碼前200行

http src mage bsp bubuko str 百度 爬蟲 圖片 Python爬蟲 - 爬取百度html代碼前200行 - 改進版, 增加了對字符串的.strip()處理 Python爬蟲 - 爬取百度html代碼前200行

簡易python爬蟲boss直聘職位,並寫入excel

python爬蟲寫入excel1,默認城市是杭州,代碼如下#! -*-coding:utf-8 -*-from urllib import request, parsefrom bs4 import BeautifulSoupimport datetimeimport xlwt starttime = dat

Python 爬蟲微信文章

微信爬蟲 爬取微信文章 爬取公眾號文章搜狗微信平臺為入口 地址:http://weixin.sogou.com/ --------------------------------------------------------------搜索關鍵詞“科技”對比網址變化情況查看網址http://wei

python爬蟲QQ說說並且生成詞雲圖,回憶滿滿!

運維開發 網絡 分析 matplot 容易 jieba 編程語言 提示框 然而 Python(發音:英[?pa?θ?n],美[?pa?θɑ:n]),是一種面向對象、直譯式電腦編程語言,也是一種功能強大的通用型語言,已經具有近二十年的發展歷史,成熟且穩定。它包含了一組完善而且