Python-15:爬蟲之單線程爬蟲

一、Requests的介紹與安裝javascript

  requests:HTTP for Humanscss

  完美替代Python的urllib2模塊html

  更多的自動化java

  更友好的用戶體驗python

  如何安裝:Windows:pip install requestsjquery

  第三方庫的安裝技巧程序員

    少用easy_install由於只能安裝不能卸載正則表達式

    多用pip方式安裝編程

    在國內撞牆的時候咱們可使用這個網站:http://www.lfd.uci.edu/~gohlke/pythonlibs/    網頁爬蟲

    打開該網站,搜素requests,單擊圖中紅框中的內容將其下載

     打開下載的文件目錄,將此文件的後綴名從whl改成zip

 

    將其解壓,獲得requests與requests-2.17.3.dist-info兩個文件夾,咱們將requests文件夾總體賦值粘貼到C:\Python27\Lib(Python的安裝目錄下的lib文件夾下)

 

二、第一個網頁爬蟲

  使用requests獲取網頁源代碼

    直接獲取源代碼

#coding:utf-8
import requests
qhmu=requests.get("http://www.cnblogs.com/jiyongxin")
print qhmu.text

 

    輸出結果  

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>小新丶 - 博客園</title>
<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=m_FXmwz3wxZoecUwNEK23PAzc-j9vbX_C6MblJ5ouMc1"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/CodingLife/bundle-CodingLife.css?v=s0uk-4nDGKcoZzCtu5RG1QHcsOLuk4tFWHoK2TgaeRE1"/>
<link id="mobile-style" media="only screen and (max-width: 768px)" type="text/css" rel="stylesheet" href="/skins/CodingLife/bundle-CodingLife-mobile.css?v=svj45cmFr8dtGVB0Cq4o-6MjM6Bz3Y76mAYaZnSJon01"/>
<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/jiyongxin/rss"/>
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/jiyongxin/rsd.xml"/>
<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/jiyongxin/wlwmanifest.xml"/>
<script src="//common.cnblogs.com/script/jquery.js" type="text/javascript"></script>  
<script type="text/javascript">var currentBlogApp = 'jiyongxin', cb_enable_mathjax=false;var isLogined=false;</script>
<script src="/bundles/blog-common.js?v=E1-LyrzANB2jbN9omtnpOHx3eU0Kt3DyislfhU0b5p81" type="text/javascript"></script>
</head>
<body>
<a name="top"></a>

<!--done-->
<div id="home">
<div id="header">
    <div id="blogTitle">
    <a id="lnkBlogLogo" href="http://www.cnblogs.com/jiyongxin/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="返回主頁" /></a>            
        
<!--done-->
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/jiyongxin/">小新丶</a></h1>
<h2>小白程序員大雜燴學習之路</h2>



        
    </div><!--end: blogTitle 博客的標題和副標題 -->
    <div id="navigator">
        
<ul id="navList">
<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客園</a></li>
<li><a id="blog_nav_myhome" class="menu" href="http://www.cnblogs.com/jiyongxin/">首頁</a></li>
<li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新隨筆</a></li>
<li><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/%E5%B0%8F%E6%96%B0%E4%B8%B6">聯繫</a></li>
<li><a id="blog_nav_rss" class="menu" href="http://www.cnblogs.com/jiyongxin/rss">訂閱</a>
<!--<a id="blog_nav_rss_image" class="aHeaderXML" href="http://www.cnblogs.com/jiyongxin/rss"><img src="//www.cnblogs.com/images/xml.gif" alt="訂閱" /></a>--></li>
<li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li>
</ul>
        <div class="blogStats">
            
            <div id="blog_stats">
<span id="stats_post_count">隨筆 - 18&nbsp; </span>
<span id="stats_article_count">文章 - 0&nbsp; </span>
<span id="stats-comment_count">評論 - 2</span>
</div>
            
        </div><!--end: blogStats -->
    </div><!--end: navigator 博客導航欄 -->
</div><!--end: header 頭部 -->

<div id="main">
    <div id="mainContent">
    <div class="forFlow">
        

<!--done-->


<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl00_ImageLink" href="http://www.cnblogs.com/jiyongxin/archive/2017/06/12.html">2017年6月12日</a>                  
    </div>

    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6993224.html">Python-15:爬蟲之正則表達式應用舉例</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 首先,咱們從最簡單的使用python來讀取本地文件中的文本內容來開始 一、在本地新建一個html文檔,內容以下 二、在與html文件相同目錄下建立咱們的Python文件,內容以下 三、輸出結果爲 這樣咱們就使用Python簡單的一句代碼將HTML文件讀取出來了,那麼,咱們想要獲得HTML中特定的信息<a href="http://www.cnblogs.com/jiyongxin/p/6993224.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-06-12 16:24 小新丶 閱讀(2) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6993224" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
</div>


<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl01_ImageLink" href="http://www.cnblogs.com/jiyongxin/archive/2017/06/07.html">2017年6月7日</a>                  
    </div>

    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6957997.html">Python-14:爬蟲之正則表達式1</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 通過一段時間的基礎知識鋪墊,終於能夠開始學習爬蟲了,對,就是爬蟲,能夠爬東西的蟲子! 爬蟲基礎,一個是Python,一個就是正則表達式了,固然,正則表達式在任什麼時候候都不容忽視它的重要性! 接下來,咱們從一個破解小密碼來開始學習正則表達式 laodhfejzuwxyzixyzladivhwanxyzl<a href="http://www.cnblogs.com/jiyongxin/p/6957997.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-06-07 17:04 小新丶 閱讀(9) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6957997" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_1" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6957635.html">Python-13:模塊</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、認識Python模塊 函數是能夠實現一項或多項功能的一段程序,模塊是能夠實現一項或多項功能的程序塊 安裝目錄下的lib文件夾中都是模塊 如何導入模塊 使用import關鍵字,若是使用這個模塊必須先導入 sys模塊 在Python中有一些模塊是不用咱們本身去定義的,Python官方提供的自帶的模塊<a href="http://www.cnblogs.com/jiyongxin/p/6957635.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-06-07 16:14 小新丶 閱讀(5) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6957635" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
</div>


<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl02_ImageLink" href="http://www.cnblogs.com/jiyongxin/archive/2017/05/18.html">2017年5月18日</a>                  
    </div>

    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6873408.html">使用地圖切片並最終將地圖發佈在arcgis for server</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、記錄好下載的離線地圖切片文件夾所在的位置(上個隨筆有介紹如何下載離線地圖) 二、打開arcmap 三、新建一個空的模板 四、點擊add data 五、選擇咱們下載的切片點擊add 六、界面如圖所示 七、生成發佈所需的文件並在arcgis for server上進行發佈 依次點擊File-Shar<a href="http://www.cnblogs.com/jiyongxin/p/6873408.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-18 14:56 小新丶 閱讀(2) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6873408" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_1" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6873158.html">使用下載器下載適用於arcgis的離線地圖切片</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、下載太樂地圖下載器或水經注離線地圖下載器(官網下載爲適用版,加水印且控制下載大小) 二、地圖下載器界面以下 太樂地圖下載器 水經注離線地圖下載器 三、兩款軟件操做相似,咱們就以水經注離線地圖下載器爲例,詳解各個步驟 ①點擊設置 ②選擇在線地圖 ③選擇本身須要下載的地圖,這裏以谷歌衛星地圖爲例(注<a href="http://www.cnblogs.com/jiyongxin/p/6873158.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-18 14:25 小新丶 閱讀(2) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6873158" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_2" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6835990.html">Python-12:Python語法基礎-函數</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、函數 function,通俗來說函數就是功能,函數是用來封裝功能的,函數分爲兩種類型,一種是系統自帶的不用咱們編寫就可使用的。另外一種函數是自定義的,須要咱們編寫其功能,這種函數自由度高,叫作自定義函數。 函數的定義: ①聲明這個指定的部分是函數 ②編寫這個函數的功能 格式:def 函數名():<a href="http://www.cnblogs.com/jiyongxin/p/6835990.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-18 14:02 小新丶 閱讀(7) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6835990" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
</div>


<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl03_ImageLink" href="http://www.cnblogs.com/jiyongxin/archive/2017/05/10.html">2017年5月10日</a>                  
    </div>

    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl03_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6835196.html">Python-11:Python語法基礎-控制流</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、Python中的三種控制流 程序中代碼的執行是有順序的,有的代碼會從上到下按順序執行,有的程序代碼會跳轉着執行,有的程序代碼會選擇不一樣的分支執行,有的代碼會循環着執行,什麼樣的程序應該選擇分支執行,什麼樣的代碼應該循環着執行,在Python中是有相應的控制語句控制的,控制語句能控制某段代碼的執行<a href="http://www.cnblogs.com/jiyongxin/p/6835196.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-10 11:51 小新丶 閱讀(7) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6835196" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl03_DayList_TitleUrl_1" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6831564.html">Python-10:Python語法基礎-運算符與表達式</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、Python運算符簡介 1)什麼是運算符 在Python中常常須要對一個或多個數字進行操做,2+3中的+是運算符,&quot;hello&quot;*20中的*也是運算符 2)運算符有哪些 + - * / ** &lt; &gt; != // % &amp; | ^ ~ &gt;&gt; &lt;&lt; &lt;= &gt;= == not and or 3)運算符的<a href="http://www.cnblogs.com/jiyongxin/p/6831564.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-10 09:43 小新丶 閱讀(7) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6831564" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
</div>


<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl04_ImageLink" href="http://www.cnblogs.com/jiyongxin/archive/2017/05/09.html">2017年5月9日</a>                  
    </div>

    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl04_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6831239.html">Python-09:Python語法基礎-行與縮進</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、邏輯行和物理行 Python中邏輯行主要指一段代碼,在乎義上它的行數,而物理行,指的是咱們實際看到的行數 二、行中分號的使用規則 在Python中一個物理行通常能夠包括多個邏輯行,在一個物理行中編寫多個邏輯行的時候,邏輯行與邏輯行用;號隔開。 每一個邏輯行是必需要有分號的,可是咱們在編寫程序的時候<a href="http://www.cnblogs.com/jiyongxin/p/6831239.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-09 16:35 小新丶 閱讀(8) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6831239" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl04_DayList_TitleUrl_1" class="postTitle2" href="http://www.cnblogs.com/jiyongxin/p/6830731.html">Python-08:Python語法基礎-標識符和對象</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 一、什麼是標識(zhi)符? Python中咱們在編程的時候,起的名字就叫作標識符。其中變量和常量就是標識符的一種 二、標識符的命名規則 ①標識符的第一個字符必須是字母或者下劃線,不能是數字或者特殊符號等 ②除了第一個字符外,其餘的可使字母下劃線和數字 ③大小寫敏感 stuName和stuname<a href="http://www.cnblogs.com/jiyongxin/p/6830731.html" class="c_b_p_desc_readmore">閱讀全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-05-09 15:19 小新丶 閱讀(7) 評論(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=6830731" rel="nofollow">編輯</a></div>
            <div class="clear"></div>
        
</div>

<div class="topicListFooter"><div id="nav_next_page"><a href="http://www.cnblogs.com/jiyongxin/default.html?page=2">下一頁</a></div></div>


    </div><!--end: forFlow -->
    </div><!--end: mainContent 主體內容容器-->

    <div id="sideBar">
        <div id="sideBarMain">
            
<!--done-->
<div class="newsItem">
<h3 class="catListTitle">公告</h3>
    <div id="blog-news"></div><script type="text/javascript">loadBlogNews();</script>
</div>

            <div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script>
            
            <div id="leftcontentcontainer">
                <div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script>
            </div>
            
        </div><!--end: sideBarMain -->
    </div><!--end: sideBar 側邊欄容器 -->
    <div class="clear"></div>
    </div><!--end: main -->
    <div class="clear"></div>
    <div id="footer">
        
<!--done-->
Copyright &copy;2017 小新丶
    </div><!--end: footer -->
</div><!--end: home 自定義的最大容器 -->
</body>
</html>

 

 修改Http頭獲取源代碼

   若是有些網站有反爬蟲,會檢測你訪問的客戶端是否是瀏覽器,若是是瀏覽器能夠進入,不是的話會被拒絕,這時候咱們就能夠吧咱們的爬蟲假裝成瀏覽器

#coding:utf-8
import requests
_header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
qhmu=requests.get("http://jp.tingroom.com/yuedu/yd300p/",headers=_header)
qhmu.encoding='utf-8'
print qhmu.text  

  這樣,也能夠把網頁的源代碼給弄出來

  獲取到網頁的源代碼是第一步,咱們最終目的是要獲取咱們所須要的信息,咱們就來扒取到個人博客中的標題

  觀察咱們標題處的代碼

<div class="postTitle">
    <a XXXXXX>Python-09:Python語法基礎-行與縮進</a>
</div>

 

  咱們能夠先找出網頁上全部class爲postTitle的div,在從找到的內容中根據「>(.*?)</a>」來檢索

  第一步,先找出全部包括隨筆標題的div

#coding:utf-8
import requests
import re
_header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
qhmu=requests.get("http://www.cnblogs.com/jiyongxin",headers=_header)
qhmu.encoding='utf-8'
div_Title=re.findall('<div class="postTitle">(.*?)</div>',qhmu.text,re.S)
for each in div_Title:
    print each

  輸出結果爲

  第二步,從div中尋找標題

#coding:utf-8
import requests
import re
_header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
qhmu=requests.get("http://www.cnblogs.com/jiyongxin",headers=_header)
qhmu.encoding='utf-8'
div_Title=re.findall('<div class="postTitle">(.*?)</div>',qhmu.text,re.S)
for each in div_Title:
    a_title=re.findall('>(.*?)</a>',each,re.S)
    print a_title[0]

 

輸出結果爲

  成功將全部的標題扒取出來

三、向網頁提交數據

  Get 與 Post介紹

    get:從服務器上獲取數據

    post:向服務器傳送數據

    get經過構造url中的參數來實現功能

    post是將數據放在header中提交數據

  分析目標網站

  request的表單提交功能

相關文章
相關標籤/搜索