<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Python 網(wǎng)頁爬蟲

      一、要解決的問題

      需要解決的是根據(jù)自定義的關(guān)鍵詞自動搜索google學(xué)術(shù),解析搜索到的網(wǎng)頁,下載所有相應(yīng)的論文的PDF鏈接。這里我們采用Python來實現(xiàn),

      二、Python入門

      python 自動縮進(jìn):shift+table整塊向左縮進(jìn),table向右縮進(jìn),在修改整塊代碼時很有用比如將函數(shù)變成單獨執(zhí)行時。

      了解python的變量,包,函數(shù)定義等

      三、網(wǎng)頁知識

      3.1 瀏覽網(wǎng)頁的過程

      打開網(wǎng)頁的過程其實就是瀏覽器作為一個瀏覽的“客戶端”,向服務(wù)器端發(fā)送了 一次請求,把服務(wù)器端的文件“抓”到本地,再進(jìn)行解釋、展現(xiàn)。

      HTML是一種標(biāo)記語言,用標(biāo)簽標(biāo)記內(nèi)容并加以解析和區(qū)分。

      瀏覽器的功能是將獲取到的HTML代碼進(jìn)行解析,然后將原始的代碼轉(zhuǎn)變成我們直接看到的網(wǎng)站頁面。

      3.2 URI和URL的概念

      簡單的來講,URL就是在瀏覽器端輸入的    http://www.baidu.com    這個字符串。

      在理解URL之前,首先要理解URI的概念。

      URL是URI的一個子集。它是Uniform Resource Locator的縮寫,譯為“統(tǒng)一資源定位 符”。

      通俗地說,URL是Internet上描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上。

      采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件、服務(wù)器的地址和目錄等。

      URL的一般格式為(帶方括號[]的為可選項):

      protocol :// hostname[:port] / path / [;parameters][?query]#fragment

      URL的格式由三部分組成:

      ①第一部分是協(xié)議(或稱為服務(wù)方式)。

      ②第二部分是存有該資源的主機IP地址(有時也包括端口號)。

      ③第三部分是主機資源的具體地址,如目錄和文件名等。

      第一部分和第二部分用“://”符號隔開,

      第二部分和第三部分用“/”符號隔開。

      第一部分和第二部分是不可缺少的,第三部分有時可以省略。

      參考至:http://blog.csdn.net/pleasecallmewhy/article/details/8922826

      四、網(wǎng)頁爬蟲

      4.1 解決google無法登陸

      因為要抓取的google學(xué)術(shù)的頁面,但是google在中國屏蔽了,所以需要在電腦上先配置好goagent,然后進(jìn)行代理配置,代碼如下


      proxy = urllib2.ProxyHandler({"http":"http://127.0.0.1:8087","https":"https://127.0.0.1:8087"})

      opener = urllib2.build_opener(proxy)

      urllib2.install_opener(opener)


      4.2 解決抓取屏蔽

         對于少量的查詢,但如果要進(jìn)行上千上萬次的查詢,上面的方法就不再有效了, Google會檢測你請求的來源,如果我們利用機器頻繁爬取Google的搜索結(jié)果,不多久就Google會block你的IP,并給你返回503 Error頁面。可以設(shè)置URL請求的headers,  偽裝我們的user agent。簡單的說,user agent就是客戶端瀏覽器等應(yīng)用程序使用的一種特殊的網(wǎng)絡(luò)協(xié)議, 在每次瀏覽器(郵件客戶端/搜索引擎蜘蛛)進(jìn)行 HTTP 請求時發(fā)送到服務(wù)器,服務(wù)器就知道了用戶是使用什么瀏覽器(郵件客戶端/搜索引擎蜘蛛)來訪問的。 有時候為了達(dá)到一些目的,我們不得不去善意的欺騙服務(wù)器告訴它我不是在用機器訪問你。


      user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \

      'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \

      'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ \

      (KHTML, like Gecko) Element Browser 5.0', \

      'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \

      'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \

      'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \

      'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) \

      Version/6.0 Mobile/10A5355d Safari/8536.25', \

      'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) \

      Chrome/28.0.1468.0 Safari/537.36', \

      'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']

      proxy = urllib2.ProxyHandler({"http":"http://127.0.0.1:8087","https":"https://127.0.0.1:8087"})

      opener = urllib2.build_opener(proxy)

      urllib2.install_opener(opener)


      4.3 正則表達(dá)式解析網(wǎng)頁

      使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。比如:現(xiàn)在的需求是要找到一個正則表達(dá)式來匹配后綴是“.pdf”的字符串。


      inputURL = 'http://scholar.google.com/scholar?q=text+detection&btnG=&hl=en&as_sdt=0%2C5'

      request = urllib2.Request(inputURL)

      index = random.randint(0, 9)

      user_agent = user_agents[index]

      request.add_header('User-agent', user_agent)

      f = urllib2.urlopen(request).read() #打開網(wǎng)頁

      print f

      localDir = 'E:\download\\' #下載PDF文件需要存儲在本地的文件夾

      urlList = [] #用來存儲提取的PDF下載的url的列表

      for eachLine in f: #遍歷網(wǎng)頁的每一行

      line = eachLine.strip() #去除行首位的空格,習(xí)慣性寫法

      if re.match('.*PDF.*', line): #去匹配含有“PDF”字符串的行,只有這些行才有PDF下載地址

      wordList = line.split('\"') #以"為分界,將該行分開,這樣就將url地址單獨分開了

      for word in wordList: #遍歷每個字符串

      if re.match('.*\.pdf$', word): #去匹配含有“.pdf”的字符串,只有url中才有

      urlList.append(word) #將提取的url存入列表

      for everyURL in urlList: #遍歷列表的每一項,即每一個PDF的url

      wordItems = everyURL.split('/') #將url以/為界進(jìn)行劃分,為了提取該PDF文件名

      for item in wordItems: #遍歷每個字符串

      if re.match('.*\.pdf$', item): #查找PDF的文件名

      PDFName = item #查找到PDF文件名

      localPDF = localDir + PDFName #將本地存儲目錄和需要提取的PDF文件名進(jìn)行連接

      try:

      urllib.urlretrieve(everyURL, localPDF) #按照url進(jìn)行下載,并以其文件名存儲到本地目錄

      except Exception, e:

      continue


      五、遇到的問題及解決

      5.1 采用http協(xié)議

      打開google的時候,如果用https協(xié)議無法打開網(wǎng)頁取到內(nèi)容,只有采用http協(xié)議才可以,原因可能是https采用加密協(xié)議。


      # -*- coding: utf-8 -*-

      """

      Created on Fri Feb 13 16:27:02 2015

      @author: dwanminghuang

      """

      import urllib #導(dǎo)入urllib模塊

      import urllib2 #導(dǎo)入urllib2模塊

      import re

      import re, random, types #導(dǎo)入正則表達(dá)式模塊:re模塊

      user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \

      'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \

      'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ \

      (KHTML, like Gecko) Element Browser 5.0', \

      'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \

      'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \

      'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \

      'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) \

      Version/6.0 Mobile/10A5355d Safari/8536.25', \

      'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) \

      Chrome/28.0.1468.0 Safari/537.36', \

      'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']

      proxy = urllib2.ProxyHandler({"http":"http://127.0.0.1:8087","https":"https://127.0.0.1:8087"})

      opener = urllib2.build_opener(proxy)

      urllib2.install_opener(opener)

      inputURL = 'http://scholar.google.com/scholar?q=text+detection&btnG=&hl=en&as_sdt=0%2C5'

      request = urllib2.Request(inputURL)

      index = random.randint(0, 9)

      user_agent = user_agents[index]

      request.add_header('User-agent', user_agent)

      f = urllib2.urlopen(request).read() #打開網(wǎng)頁

      print f

      localDir = 'E:\download\\' #下載PDF文件需要存儲在本地的文件夾

      urlList = [] #用來存儲提取的PDF下載的url的列表

      for eachLine in f: #遍歷網(wǎng)頁的每一行

      line = eachLine.strip() #去除行首位的空格,習(xí)慣性寫法

      if re.match('.*PDF.*', line): #去匹配含有“PDF”字符串的行,只有這些行才有PDF下載地址

      wordList = line.split('\"') #以"為分界,將該行分開,這樣就將url地址單獨分開了

      for word in wordList: #遍歷每個字符串

      if re.match('.*\.pdf$', word): #去匹配含有“.pdf”的字符串,只有url中才有

      urlList.append(word) #將提取的url存入列表

      for everyURL in urlList: #遍歷列表的每一項,即每一個PDF的url

      wordItems = everyURL.split('/') #將url以/為界進(jìn)行劃分,為了提取該PDF文件名

      for item in wordItems: #遍歷每個字符串

      if re.match('.*\.pdf$', item): #查找PDF的文件名

      PDFName = item #查找到PDF文件名

      localPDF = localDir + PDFName #將本地存儲目錄和需要提取的PDF文件名進(jìn)行連接

      try:

      urllib.urlretrieve(everyURL, localPDF) #按照url進(jìn)行下載,并以其文件名存儲到本地目錄

      except Exception, e:

      continue

       

       


      posted @ 2015-02-20 18:13  dawnminghuang  閱讀(930)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 一色桃子中出欲求不满人妻| 国产午夜亚洲精品国产成人| yw尤物av无码国产在线观看| 精品国产成人午夜福利| 老熟妇性老熟妇性色| 一本大道久久香蕉成人网| 亚洲国产天堂久久综合网| 青柠影院免费观看高清电视剧丁香| 国产永久免费高清在线| 日韩一区二区三区日韩精品| 亚洲男人天堂2018| 国产成人8X人网站视频| 亚洲精品色国语对白在线| 男人添女人下部高潮视频| 新余市| gogogo高清在线观看视频中文| 亚洲理论在线A中文字幕| 国产亚洲精品久久久久久青梅| 日韩av天堂综合网久久| 国产av无码专区亚洲草草| 国产中文字幕精品免费| 国偷自产av一区二区三区| 亚洲 另类 小说 国产精品无码| 国产综合久久99久久| 吉隆县| 国产精品污双胞胎在线观看| 亚洲一区成人在线视频| 五月丁香六月综合缴情在线 | 麻豆成人精品国产免费| 国产不卡一区二区在线视频| 亚洲熟妇熟女久久精品综合| 免费看视频的网站| 一卡二卡三卡四卡视频区| 色欲精品国产一区二区三区av| 成人av久久一区二区三区| 亚洲精品中文av在线| 熟女视频一区二区在线观看| 久久不见久久见中文字幕免费| 国产中年熟女大集合| 无遮无挡爽爽免费视频| 亚洲av与日韩av在线|