python實(shí)現(xiàn)博客文章爬蟲示例
#!/usr/bin/python
#-*-coding:utf-8-*-
# JCrawler
# Author: Jam <810441377@qq.com>
import time
import urllib2
from bs4 import BeautifulSoup
# 目標(biāo)站點(diǎn)
TargetHost = "http://adirectory.blog.com"
# User Agent
UserAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36'
# 鏈接采集規(guī)則
# 目錄鏈接采集規(guī)則
CategoryFind = [{'findMode':'find','findTag':'div','rule':{'id':'cat-nav'}},
{'findMode':'findAll','findTag':'a','rule':{}}]
# 文章鏈接采集規(guī)則
ArticleListFind = [{'findMode':'find','findTag':'div','rule':{'id':'content'}},
{'findMode':'findAll','findTag':'h2','rule':{'class':'title'}},
{'findMode':'findAll','findTag':'a','rule':{}}]
# 分頁(yè)URL規(guī)則
PageUrl = 'page/#page/'
PageStart = 1
PageStep = 1
PageStopHtml = '404: Page Not Found'
def GetHtmlText(url):
request = urllib2.Request(url)
request.add_header('Accept', "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp")
request.add_header('Accept-Encoding', "*")
request.add_header('User-Agent', UserAgent)
return urllib2.urlopen(request).read()
def ArrToStr(varArr):
returnStr = ""
for s in varArr:
returnStr += str(s)
return returnStr
def GetHtmlFind(htmltext, findRule):
findReturn = BeautifulSoup(htmltext)
returnText = ""
for f in findRule:
if returnText != "":
findReturn = BeautifulSoup(returnText)
if f['findMode'] == 'find':
findReturn = findReturn.find(f['findTag'], f['rule'])
if f['findMode'] == 'findAll':
findReturn = findReturn.findAll(f['findTag'], f['rule'])
returnText = ArrToStr(findReturn)
return findReturn
def GetCategory():
categorys = [];
htmltext = GetHtmlText(TargetHost)
findReturn = GetHtmlFind(htmltext, CategoryFind)
for tag in findReturn:
print "[G]->Category:" + tag.string + "|Url:" + tag['href']
categorys.append({'name': tag.string, 'url': tag['href']})
return categorys;
def GetArticleList(categoryUrl):
articles = []
page = PageStart
#pageUrl = PageUrl
while True:
htmltext = ""
pageUrl = PageUrl.replace("#page", str(page))
print "[G]->PageUrl:" + categoryUrl + pageUrl
while True:
try:
htmltext = GetHtmlText(categoryUrl + pageUrl)
break
except urllib2.HTTPError,e:
print "[E]->HTTP Error:" + str(e.code)
if e.code == 404:
htmltext = PageStopHtml
break
if e.code == 504:
print "[E]->HTTP Error 504: Gateway Time-out, Wait"
time.sleep(5)
else:
break
if htmltext.find(PageStopHtml) >= 0:
print "End Page."
break
else:
findReturn = GetHtmlFind(htmltext, ArticleListFind)
for tag in findReturn:
if tag.string != None and tag['href'].find(TargetHost) >= 0:
print "[G]->Article:" + tag.string + "|Url:" + tag['href']
articles.append({'name': tag.string, 'url': tag['href']})
page += 1
return articles;
print "[G]->GetCategory"
Mycategorys = GetCategory();
print "[G]->GetCategory->Success."
time.sleep(3)
for category in Mycategorys:
print "[G]->GetArticleList:" + category['name']
GetArticleList(category['url'])
- Python 爬蟲爬取指定博客的所有文章
- 如何使用python爬取csdn博客訪問(wèn)量
- python實(shí)現(xiàn)批量下載新浪博客的方法
- python抓取最新博客內(nèi)容并生成Rss
- 用Python的Tornado框架結(jié)合memcached頁(yè)面改善博客性能
- python采集博客中上傳的QQ截圖文件
- Python+django實(shí)現(xiàn)簡(jiǎn)單的文件上傳
- Python Django使用forms來(lái)實(shí)現(xiàn)評(píng)論功能
- Python+Django在windows下的開發(fā)環(huán)境配置圖解
- Python采用Django開發(fā)自己的博客系統(tǒng)
相關(guān)文章
python?selenium模擬點(diǎn)擊問(wèn)題解決方案
這篇文章主要介紹了python?selenium模擬點(diǎn)擊問(wèn)題,涉及到安裝谷歌瀏覽器和瀏覽器驅(qū)動(dòng)的相關(guān)知識(shí)介紹,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
python 用pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能
這篇文章主要介紹了python 用pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
python散點(diǎn)圖雙軸設(shè)置坐標(biāo)軸刻度的實(shí)現(xiàn)
散點(diǎn)圖是一種常用的圖表類型,可以用來(lái)展示兩個(gè)變量之間的關(guān)系,本文主要介紹了python散點(diǎn)圖雙軸設(shè)置坐標(biāo)軸刻度的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
OpenCV目標(biāo)檢測(cè)Meanshif和Camshift算法解析
這篇文章主要為大家介紹了OpenCV目標(biāo)檢測(cè)Meanshif和Camshift算法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
python3.5 tkinter實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了python3.5 tkinter實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Django JSONField的自動(dòng)轉(zhuǎn)換思路詳解(django自定義模型字段)
如果想實(shí)現(xiàn)JSONField的自動(dòng)轉(zhuǎn)換,可以使用Django REST framework的JSONField,或者自定義一個(gè)字段類并覆蓋from_db_value()和get_prep_value()方法來(lái)實(shí)現(xiàn)這個(gè)功能,這篇文章主要介紹了Django JSONField的自動(dòng)轉(zhuǎn)換(django自定義模型字段)問(wèn)題,需要的朋友可以參考下2023-06-06
pandas 把數(shù)據(jù)寫入txt文件每行固定寫入一定數(shù)量的值方法
今天小編就為大家分享一篇pandas 把數(shù)據(jù)寫入txt文件每行固定寫入一定數(shù)量的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python pandas讀取csv后,獲取列標(biāo)簽的方法
今天小編就為大家分享一篇python pandas讀取csv后,獲取列標(biāo)簽的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11

