【學習筆記】python爬取百度真實url

來源:互聯網
上載者:User

標籤:python

        今天跑個指令碼需要一堆測試的url,,,挨個找複製粘貼肯定不是程式員的風格,so,還是寫個指令碼吧。

        環境:python2.7

        編輯器:sublime text 3

       一、分析一下

        首先非常感謝百度大佬的url分類非常整齊,都在一個類下

       

650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/A4/D4/wKioL1myOoKwHUt_AABV9rZbvps718.png-wh_500x0-wm_3-wmp_4-s_1471720461.png" title="QQ20170908143211.png" alt="wKioL1myOoKwHUt_AABV9rZbvps718.png-wh_50" />

        即c-showurl,所以只要根據css爬取連結就可以,利用beautifulsoup即可實現,代碼如下:

        

        soup = BeautifulSoup(content,‘html.parser‘)        urls = soup.find_all("a",class_=‘c-showurl‘)

        還有另外的一個問題是百度對url進行了加密,要想獲得真實的url,我的思路是訪問一遍加密的url,再獲得訪問介面的url,這時擷取到的url即為真實的url。

完整代碼如下:

#coding = utf-8import requestsfrom bs4 import BeautifulSoupimport timeheaders = {                    ‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘,                    ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 QIHU 360SE‘            }page_start = raw_input(‘please input stratpage\n‘)page_end = raw_input(‘please input endpage\n‘)word = raw_input(‘please input keyword\n‘)if page_start == 1:    page_start = 0else:    page_start = (int(page_start)-1)*10page_end = (int(page_end)-1)*10for i in range(page_start,page_end,10):    url = ‘http://www.baidu.com/s?wd=‘+word+‘&pn=‘+str(i)    try:        response = requests.get(url,headers=headers,timeout=10)        print ‘downloading...‘+url        content = response.content        soup = BeautifulSoup(content,‘html.parser‘)        urls = soup.find_all("a",class_=‘c-showurl‘)        for href in urls:            a = href[‘href‘]            try:                res = requests.get(a,headers=headers,timeout=10)                with open(‘urls.txt‘,‘a‘) as f:                    f.write(res.url)                    f.write(‘\n‘)                time.sleep(1)            except Exception,e:                print e                pass    except Exception,e:        print e        pass

當然,這隻是簡單的功能,如果爬取大量的url,建議利用線程進行處理,不然等到爬完也等到地老天荒了。。。。。我是爬取百十來個url,親測還可以。

本文出自 “踟躕” 部落格,請務必保留此出處http://chichu.blog.51cto.com/11287515/1963693

【學習筆記】python爬取百度真實url

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.