欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現博客文章爬蟲示例

 更新時間:2014年02月26日 14:03:19   作者:  
簡單的博客文章爬蟲,比較通用,因為大部分的網站結構都差不多,需要的朋友可以參考下

復制代碼 代碼如下:

#!/usr/bin/python
#-*-coding:utf-8-*-
# JCrawler
# Author: Jam <810441377@qq.com>

import time
import urllib2
from bs4 import BeautifulSoup

# 目標站點
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':{}}]
# 分頁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基于SMTP發(fā)送郵件的方法

    Python基于SMTP發(fā)送郵件的方法

    這篇文章主要介紹了Python基于SMTP 發(fā)送郵件的方法,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • python matplotlib:plt.scatter() 大小和顏色參數詳解

    python matplotlib:plt.scatter() 大小和顏色參數詳解

    這篇文章主要介紹了python matplotlib:plt.scatter() 大小和顏色參數詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 如何利用Pandas查詢選取數據

    如何利用Pandas查詢選取數據

    在數據分析的過程中通常要對數據進行清洗與處理,而其中比較重要和常見的操作就有對數據進行篩選與查詢,下面這篇文章主要給大家介紹了關于如何利用Pandas查詢選取數據的相關資料,需要的朋友可以參考下
    2022-07-07
  • Python中的字典與成員運算符初步探究

    Python中的字典與成員運算符初步探究

    這篇文章主要介紹了Python中的字典與成員運算符初步探究,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10
  • Python實現壓縮文件夾與解壓縮zip文件的方法

    Python實現壓縮文件夾與解壓縮zip文件的方法

    這篇文章主要介紹了Python實現壓縮文件夾與解壓縮zip文件的方法,涉及Python使用zipfile模塊進行zip文件壓縮與解壓縮相關操作技巧,需要的朋友可以參考下
    2018-09-09
  • Python實現Appium錄屏功能示例代碼

    Python實現Appium錄屏功能示例代碼

    這篇文章主要介紹了Python實現Appium錄屏功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 快速了解Python相對導入

    快速了解Python相對導入

    這篇文章主要介紹了快速了解Python相對導入,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python?matplotlib用面積填充實現lmplot的代碼示例

    python?matplotlib用面積填充實現lmplot的代碼示例

    這篇文章主要介紹了python?matplotlib如何用面積填充實現lmplot,文章通過代碼示例介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴可以參考閱讀
    2023-07-07
  • Python使用Keras OCR實現從圖像中刪除文本

    Python使用Keras OCR實現從圖像中刪除文本

    這篇文章主要為大家介紹了如何在Python中利用Keras OCR實現快速地從圖像中刪除文本,從而作為圖像分類器的預處理步驟,需要的可以參考一下
    2022-03-03
  • python數據結構之面向對象

    python數據結構之面向對象

    這篇文章主要介紹了python數據結構之面向對象,在python數據結構的上一章節(jié)我們講述了python的輸入輸出控制異常,希望大家重點掌握輸出和控制,這些都是比較簡單的啦,多看看就好了,接下來我們要講的是python面向對象,需要的朋友可以參考一下
    2021-12-12

最新評論