日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python爬蟲實(shí)例分析-創(chuàng)新互聯(lián)

今天小編給大家分享一下Python爬蟲實(shí)例分析的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元紅塔做網(wǎng)站,已為上家服務(wù),為紅塔各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

環(huán)境搭建

既然用python,那么自然少不了語言環(huán)境。于是乎到官網(wǎng)下載了3.5版本的。安裝完之后,隨機(jī)選擇了一個(gè)編輯器叫PyCharm,話說python編輯器還真挺多的。

發(fā)送請求

當(dāng)然我不知道python是怎么進(jìn)行網(wǎng)絡(luò)請求的,其中還有什么2.0和3.0的不同,中間曲曲折折了不少,最終還是寫出了最簡單的一段請求代碼。

import urllib.parse

import urllib.request

 

# params  CategoryId=808 CategoryType=SiteHome ItemListActionName=PostList PageIndex=3 ParentCategoryId=0 TotalPostCount=4000

def getHtml(url,values):

    user_agent='Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'

    headers = {'User-Agent':user_agent}

    data = urllib.parse.urlencode(values)

    response_result = urllib.request.urlopen(url+'?'+data).read()

    html = response_result.decode('utf-8')

    return html

 

#獲取數(shù)據(jù)

def requestCnblogs(index):

    print('請求數(shù)據(jù)')

    url = 'http://www.cnblogs.com/mvc/AggSite/PostList.aspx'

    value= {

         'CategoryId':808,

         'CategoryType' : 'SiteHome',

         'ItemListActionName' :'PostList',

         'PageIndex' : index,

         'ParentCategoryId' : 0,

        'TotalPostCount' : 4000

    }

    result = getHtml(url,value)

    return result

其實(shí)博客園這個(gè)請求還是挺標(biāo)準(zhǔn)的,哈哈正好適合抓取。因?yàn)樗祷氐木褪且欢蝖tml。(如果返回json那不是更好。。。。)

數(shù)據(jù)解析

上文已經(jīng)提到了,用到的是BeautifulSoup,好處就是不用自己寫正則,只要根據(jù)他的語法來寫就好了,在多次的測試之后終于完成了數(shù)據(jù)的解析。先上一段HTML。然后在對應(yīng)下面的代碼,也許看起來更輕松一些。

    

        

            1

        

        

        

    

    

        

Python 字符串格式化

 

 

        

            

                轉(zhuǎn)載請注明出處 Python2.6+ 增加了str.format函數(shù),用來代替原有的'%'操作符

 

            。它使用比'%'更加直觀、靈活。下面詳細(xì)介紹一下它的使用方法。 下面是使用'%'的例子: 格式很像C語言的printf是不是?由于'%'是一個(gè)操作符,只能在左右

 

            兩邊各放一個(gè)參數(shù),因此右邊多個(gè)值需要用元組或 ...

        

 

        

            新月的力量_141

            發(fā)布于 2017-02-19 23:07

            

                

                    評論(0)

                

            

            

                

                    閱讀

 

                    (138)

                

            

        

    

    

通過上文的HTML代碼可以看到幾點(diǎn)。首先每一條數(shù)據(jù)都在 div(class=”post_item”)下。然后 div(“post_item_body”)下有用戶信息,標(biāo)題,鏈接,簡介等信息。逐一根據(jù)樣式解析即可。代碼如下:廈門租叉車公司

from bs4 import BeautifulSoup

import request

import re

 

#解析最外層

def blogParser(index):

 

  cnblogs = request.requestCnblogs(index)

  soup = BeautifulSoup(cnblogs, 'html.parser')

  all_div = soup.find_all('div', attrs={'class': 'post_item_body'}, limit=20)

 

  blogs = []

  #循環(huán)div獲取詳細(xì)信息

  for item in all_div:

      blog = analyzeBlog(item)

      blogs.append(blog)

 

  return blogs

 

#解析每一條數(shù)據(jù)

def analyzeBlog(item):

    result = {}

    a_title = find_all(item,'a','titlelnk')

    if a_title is not None:

        # 博客標(biāo)題

        result["title"] = a_title[0].string

        # 博客鏈接

        result["href"] = a_title[0]['href']

    p_summary = find_all(item,'p','post_item_summary')

    if p_summary is not None:

        # 簡介

        result["summary"] = p_summary[0].text

    footers = find_all(item,'div','post_item_foot')

    footer = footers[0]

    # 作者

    result["author"] = footer.a.string

    # 作者url

    result["author_url"] = footer.a['href']

    str = footer.text

    time = re.findall(r"發(fā)布于 .+? .+? ", str)

    result["create_time"] = time[0].replace('發(fā)布于 ','')

 

    comment_str = find_all(footer,'span','article_comment')[0].a.string

    result["comment_num"] = re.search(r'\d+', comment_str).group()

 

    view_str = find_all(footer,'span','article_view')[0].a.string

    result["view_num"] = re.search(r'\d+', view_str).group()

 

    return result

 

def find_all(item,attr,c):

    return item.find_all(attr,attrs={'class':c},limit=1)

上邊一堆代碼下來,著實(shí)花費(fèi)了我不少時(shí)間,邊寫邊調(diào)試,邊百度~~不過還好最終還是出來了。等數(shù)據(jù)都整理好之后,然后我把它保存到了txt文件里面,以供其他語言來處理。本來想寫個(gè)put直接put到ElasticSearch中,奈何沒成功。后邊在試吧,畢竟我的重點(diǎn)只是導(dǎo)數(shù)據(jù),不在抓取這里。

import match

import os

import datetime

import json

 

def writeToTxt(list_name,file_path):

    try:

        #這里直接write item 即可,不要自己給序列化在寫入,會導(dǎo)致json格式不正確的問題

        fp = open(file_path,"w+",encoding='utf-8')

        l = len(list_name)

        i = 0

        fp.write('[')

        for item in list_name:

            fp.write(item)

            if i

                fp.write(',\n')

            i += 1

        fp.write(']')

        fp.close()

    except IOError:

        print("fail to open file")

 

#def getStr(item):

#   return json.dumps(item).replace('\'','\"')+',\n'

 

def saveBlogs():

    for i in range(1,2):

        print('request for '+str(i)+'...')

        blogs = match.blogParser(i,5)

        #保存到文件

        path = createFile()

        writeToTxt(blogs,path+'/blog_'+ str(i) +'.json')

        print('第'+ str(i) +'頁已經(jīng)完成')

    return 'success'

 

def createFile():

    date = datetime.datetime.now().strftime('%Y-%m-%d')

    path = '/'+date

    if os.path.exists(path):

        return path

    else:

        os.mkdir(path)

        return path

 

result = saveBlogs()

print(result)

以上就是“Python爬蟲實(shí)例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。


分享文章:Python爬蟲實(shí)例分析-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/cdccpj.html