1. 程式人生 > >【學習筆記】python爬取百度真實url

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

python

今天跑個腳本需要一堆測試的url,,,挨個找復制粘貼肯定不是程序員的風格,so,還是寫個腳本吧。

環境:python2.7

編輯器:sublime text 3

一、分析一下

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

技術分享

即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-8
import requests
from bs4 import BeautifulSoup
import time

headers = {
                    ‘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 = 0
else:
    page_start = (int(page_start)-1)*10

page_end = (int(page_end)-1)*10

for 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