python beautifulsoup 抓取網頁正文內容
最近要跟著同學做一個小專案,需要自己找語料庫,於是我用python 的 beautifulsoup 和urllib 來抓取一些網頁內容來做訓練語料。現在寫下來備忘,雖然還有些不足。
這裡,我抓取的是鳳凰軍事的滾動新聞,點開後可以發現是一系列的新聞連結,所以接下來就分兩個方面的工作,第一個是將這些新聞連結全部提取出來,儲存文字。第二個是根據這些連結訪問網頁,抓取正文內容,再儲存文字。
提取新聞連結
通過分析滾動新聞的網頁原始碼,發現這些超連結都是在<div class = "main"> </div>標籤之間(不同網站有不同的格式),用beautifulsoup來提取比較好,若用urllib容提取到其他url,不易區分。
我們在滾動新聞下方會發現有“下一頁”和“前一天”的標籤,於是我們的思路是:本頁的url提取完,如果有“下一頁”標籤,就將其url拿出來訪問,在提取url,若沒有“下一頁”標籤,則取出“前一天”標籤的url來訪問,就這樣迴圈往下提取url,直到你認為夠用了為止。(我做了100次的迴圈,大約爬了3800個url)
程式碼如下:
#encoding=utf-8 #coding=utf-8 import urllib,urllib2 from bs4 import BeautifulSoup import re import os import string #得到url的list def get_url_list(purl): #連線 req = urllib2.Request(purl,headers={'User-Agent':"Magic Browser"}) page = urllib2.urlopen(req) soup = BeautifulSoup(page.read()) #讀取標籤 a_div = soup.find('div',{'class':'main'}) b_div = a_div.find('div',{'class':'left'}) c_div = b_div.find('div',{'class':'newsList'}) links4 = [] #得到url的list for link_aa in c_div: for link_bb in link_aa: links4.append(link_bb.find('a')) links4 = list(set(links4)) links4.remove(-1) links4.remove(None) return links4 #從list中找到想要的新聞連結 #找到要訪問的下一個頁面的url def get_url(links): url = [] url2 = '' url3 = '' url4 = '' i = 0 for link in links: if link.contents == [u'後一天']: continue #上一頁 和 下一頁 的標籤情況比較複雜 #取出“上一頁”標籤的url(貌似不管用) if str(link.contents).find(u'/> ') != -1: continue #取出“下一頁”標籤的url if str(link.contents).find(u' <img') != -1: url2 = link.get("href") i = 1 continue if link.contents == [u'前一天']: url3 = link.get("href") continue url.append(link.get("href")) if(i == 1): url4 = url2 else: url4 = url3 return url , url4 def main(): link_url = [] link_url_all = [] link_url_all_temp = [] next_url = '' #開始的url purl = 'http://news.ifeng.com/listpage/4550/20140903/1/rtlist.shtml' link_url = get_url_list(purl) link_url_all , next_url = get_url(link_url) #做了100次迴圈 for i in range(100): link_url = get_url_list(next_url) link_url_all_temp , next_url = get_url(link_url) link_url_all = link_url_all + link_url_all_temp #將全部url存檔 path = 'd:\\url.txt' fp = open(path,'w') for link in link_url_all: fp.write(str(link)+'\n') fp.close() if __name__ == '__main__': main()
不過得到的url檔案有少量不相符的(不知為何),可以再寫一個檔案將他們去掉。新聞連結的url長度都是一致的,不相符的url或長或短。
在查詢“上一頁”和“下一頁”標籤時遇到了編碼問題,還好解決了,如程式所示。
提取網頁內容正文
有了上面的一系列的url,就可以提取內容了。
和上面一樣,先看一下網頁原始碼,確定正文內容都在哪些標籤內。我們發現,正文內容都在<div id = "artical_real" class = "js_img_share_area"> </div>中間,然後用beautifulsoup來提取。(有些新聞是圖片或視訊,格式與文字不一樣,我們去掉不管)
不過這裡有兩個trick,一是正文內容都在<p> </p>標籤內,怎麼把它取出來,二是有一些網頁的<p> </p>還有其他標籤,怎麼去掉,下面的程式碼裡有
程式碼如下:
#encoding=utf-8
#coding=utf-8
import urllib,urllib2
from bs4 import BeautifulSoup
import re
import os
import string
links = []
path = 'd:\\url3.txt'
file = open(path,'r')
#得到url
for line in file:
links = links + [line]
file.close()
print len(links)
i = 1
for link in links:
print link
req = urllib2.Request(link,headers={'User-Agent':"Magic Browser"})
page = urllib2.urlopen(req)
soup = BeautifulSoup(page.read())
a_div = soup.find('div',{'id':'artical_real'},{'class':'js_img_share_area'})
if a_div == None:
continue
b_div = a_div.find('div',{'id':'main_content'},{'class':'js_selection_area'})
if b_div == None:
continue
kk = b_div.findAll('p')
if kk == []:
continue
ss = str(kk)
ss = ''.join(ss)
my_cn = re.sub('<span(.*?)</span>','',ss)
my_cn = ''.join(my_cn)
my_cn = re.sub('<a(.*?)</a>','',my_cn)
my_cn = ''.join(my_cn)
my_cn = re.sub('<strong>(.*?)</strong>','',my_cn)
my_cn = ''.join(my_cn)
my_cn = re.findall('<p>(.*?)</p>',my_cn)
my_cn = ''.join(my_cn)
pth = 'd:\\webcontext\\'+str(i)+'.txt'
fp = open(pth,'w')
fp.writelines(my_cn)
fp.close()
i = i + 1
page.close()
總結
在執行時,程式常有卡住或是報錯的情況,分析後發現或是網路不好,或是伺服器不好,這時將程式重新執行一下就好了。當然,在url的檔案裡把那些已訪問過的刪掉,從最近一個未訪問的url開始,還要在上面的程式碼中將i從最新的下標開始,以免覆蓋原檔案。
相關推薦
python beautifulsoup 抓取網頁正文內容
最近要跟著同學做一個小專案,需要自己找語料庫,於是我用python 的 beautifulsoup 和urllib 來抓取一些網頁內容來做訓練語料。現在寫下來備忘,雖然還有些不足。 這裡,我抓取的是鳳凰軍事的滾動新聞,點開後可以發現是一系列的新聞連結,所以接下來就分兩個方面
Python爬蟲 BeautifulSoup抓取網頁資料 並儲存到資料庫MySQL
最近剛學習Python,做了個簡單的爬蟲,作為一個簡單的demo希望幫助和我一樣的初學者 程式碼使用python2.7做的爬蟲 抓取51job上面的職位名,公司名,薪資,釋出時間等等 直接上程式碼,程式碼中註釋還算比較清楚 ,沒有安裝mysql需要遮蔽掉相關程式碼:#!/u
python爬蟲-- 抓取網頁、圖片、文章
零基礎入門Python,給自己找了一個任務,做網站文章的爬蟲小專案,因為實戰是學程式碼的最快方式。所以從今天起開始寫Python實戰入門系列教程,也建議大家學Python時一定要多寫多練。 目標 1,學習Python爬蟲 2,爬取新聞網站新聞列表 3,爬取圖片 4,把爬取到的資料存在本地
Python selenium抓取微博內容
(一)程式設計環境 作業系統:Win 10 程式語言:Python 3.6 (二)安裝selenium 這裡使用selenium實現。 如果沒有安裝過python的selenium庫,則安裝命令如下 pip install selenium
python 爬蟲 如何用selenium抓取網頁內容
使用selenium爬取動態網頁資訊 Python selenium自動控制瀏覽器對網頁的資料進行抓取,其中包含按鈕點選、跳轉頁面、搜尋框的輸入、頁面的價值資料儲存、mongodb自動id標識等等等。 首先介紹一下 Python selenium —自動化測試工
[Python]網路爬蟲(二):利用urllib2通過指定的URL抓取網頁內容
版本號:Python2.7.5,Python3改動較大,各位另尋教程。 所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,儲存到本地。 類似於使用程式模擬IE瀏覽器的功能,把URL作為HTTP請求的內容傳送到伺服器端, 然後讀取伺服器端的響應資源。 在
python爬蟲爬取非同步載入網頁資訊(python抓取網頁中無法通過網頁標籤屬性抓取的內容)
1.問題描述 最近由於學習內容的要求,需要從網頁上抓取一些資料來做分析報告,在看了python爬蟲的一些基礎知識之後就直接上手去網站上爬資料了。作為新手踩坑是無法避免,最近就遇到了一個比較難的問題: 一般情況下,要抓去網頁上某個標籤上的內容,在通過urllib下
python多執行緒抓取網頁內容並寫入MYSQL
自己的第一個多執行緒練習,中間踩了不少坑,程式寫的很渣,但是勉強能實現功能需求了 ,實際上抓取網頁是多執行緒在MYSQL寫入的時候是加了執行緒鎖的 ,實際上感覺就不是在多執行緒寫入了,不過作為第一個練習程式就這樣吧 ,後續部落格還會繼續更新優化版本。## htm
python的BeautifulSoup實現抓取網頁資料
1環境:pycharm,python3.4 2.原始碼解析 import requests import re from bs4 import BeautifulSoup #通過requests.get獲取整個網頁的資料 def getHtmlText(url):
[Python]網路爬蟲(二):利用urllib通過指定的URL抓取網頁內容
1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=F
Python抓取網頁&批量下載檔案方法初探(正則表示式+BeautifulSoup)
最近兩週都在學習Python抓取網頁方法,任務是批量下載網站上的檔案。對於一個剛剛入門python的人來說,在很多細節上都有需要注意的地方,以下就分享一下我在初學python過程中遇到的問題及解決方法。 一、用Python抓取網頁 基本方法: import urllib
python+BeautifulSoup爬取不老歌的網頁正文
不老歌上有很多小說,想把他們都集中為一個txt放在手機裡看。下面程式碼針對以年份歸檔好的文章。 from bs4 import BeautifulSoup import requests import time import re def getContent(url)
curl抓取網頁內容php
dem windows grep 網頁資源 網頁爬蟲 url 工具 () 動態獲取 1.cURL curl是客戶端向服務器請求資源的工具 2.cURL使用場景 網頁資源:網頁爬蟲 webservice數據接口資源:動態獲取接口數據 天氣 號碼歸屬地 ftp資源:下載ftp
JAVA使用Gecco爬蟲 抓取網頁內容
log pro 指定 get www. error 一個 log4j java類 JAVA 爬蟲工具有挺多的,但是Gecco是一個挺輕量方便的工具。 先上項目結構圖。 這是一個 JAVASE的 MAVEN 項目,要添加包依賴,其他就四個文件。log4j.propertie
python 自學第二課: 使用BeautifulSoup抓取鏈接 正則表達式
find sof stdout mpi new page 正則 ges 效果 python 自學第二課: 使用BeautifulSoup抓取鏈接 正則表達式 具體的查看BeautifulSoup文檔(根據自己的安裝的版本查看對應文檔) 文檔鏈接https://www.cr
Python 抓取網頁gb2312亂碼問題
發現 file read earch () spa .com pycharm close python 爬取學校所有人四六級成績時發現爬出網頁中文亂碼 遂google 得到一解決方案 # -*- coding:utf8 -*- import urllib2
記錄一次python抓取網頁下載視訊
最近看了電影狂暴巨獸,連結是那種不固定的http連結,有可能隨時就打不開了,然後想下載下來留著,但是網頁不提供下載,所以就自己抓取了相關視訊,然後下載。廢話不多說,直接上乾貨。 用fiddle抓取主要的視訊。下圖就是抓取時候產生的相關資訊。 逐條進行分析,然後找到電影的包的地址。 http
php抓取網頁內容,獲取網頁資料
php通過simple_html_dom實現抓取網頁內容,獲取核心網頁資料,將網頁資料寫入本地 xxx.json 檔案 其程式碼實現邏輯: 1. 引入simple_html_dom.php檔案 require_once 'simple_ht
python抓取網頁資料處理後視覺化
抓取文章的連結,訪問量儲存到本地 1 #coding=utf-8 2 import requests as req 3 import re 4 import urllib 5 from bs4 import BeautifulSoup 6 import sys 7 import code
利用BeautifulSoup爬取網頁內容
利用BeautifulSoup可以很簡單的爬取網頁上的內容。這個套件可以把一個網頁變成DOM Tree 要使用BeautifulSoup需要使用命令列進行安裝,不過也可以直接用python的ide。 基礎操作 : ① 使用之前需要先從bs4中匯入包:from