❶ 如何用 Python 實現 Web 抓取
Web 抓取的定義
Web 抓取是抽取網路數據的過程。只要藉助合適的工具,任何你能看到的數據都可以進行抽取。在本文中,我們將重點介紹自動化抽取過程的程序,幫助你在較短時間內收集大量數據。除了筆者前文提到的用例,抓取技術的用途還包括:SEO 追蹤、工作追蹤、新聞分析以及筆者的最愛——社交媒體的情感分析!
一點提醒
在開啟 Web 抓取的探險之前,請確保自己了解相關的法律問題。許多網站在其服務條款中明確禁止對其內容進行抓取。例如,Medium 網站就寫道:「遵照網站 robots.txt 文件中的規定進行的爬取操作(Crawling)是可接受的,但是我們禁止抓取(Scraping)操作。」對不允許抓取的網站進行抓取可能會使你進入他們的黑名單!與任何工具一樣,Web 抓取也可能用於復制網站內容之類的不良目的。此外,由 Web 抓取引起的法律訴訟也不在少數。
設置代碼
在充分了解小心行事的必要之後,讓我們開始學習 Web 抓取。其實,Web 抓取可以通過任何編程語言實現,在不久之前,我們使用 Node 實現過。在本文中,考慮到其簡潔性與豐富的包支持,我們將使用 Python 實現抓取程序。
Web 抓取的基本過程
當你打開網路中的某個站點時,就會下載其 HTML 代碼,由你的 web 瀏覽器對其進行分析與展示。該 HTML 代碼包含了你所看到的所有信息。因此,通過分析 HTML 代碼就能得到所需信息(比如價格)。你可以使用正則表達式在數據海洋中搜索你需要的信息,也可以使用函數庫來解釋 HTML,同樣也能得到需要數據。
在 Python 中,我們將使用一個名為靚湯(Beautiful Soup)的模塊對 HTML 數據進行分析。你可以藉助 pip 之類的安裝程序安裝之,運行如下代碼即可:
pip install beautifulsoup4
或者,你也可以根據源碼進行構建。在該模塊的文檔說明頁,可以看到詳細的安裝步驟。
安裝完成之後,我們大致會遵循以下步驟實現 web 抓取:
向 URL 發送請求
接收響應
分析響應以尋找所需數據
作為演示,我們將使用筆者的博客 http://dada.theblogbowl.in/. 作為目標 URL。
前兩個步驟相對簡單,可以這樣完成:
from urllib import urlopen#Sending the http requestwebpage = urlopen('http://my_website.com/').read()
接下來,將響應傳給之前安裝的模塊:
from bs4 import BeautifulSoup#making the soup! yummy ;)soup = BeautifulSoup(webpage, "html5lib")
請注意,此處我們選擇了 html5lib 作為解析器。根據 BeautifulSoup 的文檔,你也可以為其選擇不同的解析器。
解析 HTML
在將 HTML 傳給 BeautifulSoup 之後,我們可以嘗試一些指令。譬如,檢查 HTML 標記代碼是否正確,可以驗證該頁面的標題(在 Python 解釋器中):
>>> soup.title<title>Transcendental Tech Talk</title>>>> soup.title.text
u'Transcendental Tech Talk'
>>>
接下來,開始抽取頁面中的特定元素。譬如,我想抽取博客中文章標題的列表。為此,我需要分析 HTML 的結構,這一點可以藉助 Chrome 檢查器完成。其他瀏覽器也提供了類似的工具。
使用 Chrome 檢查器檢查某個頁面的 HTML 結構
如你所見,所有文章標題都帶有 h3 標簽與兩個類屬性:post-title 與 entry-title 類。因此,用 post-title類搜索所有 h3 元素就能得到該頁的文章標題列表。在此例中,我們使用 BeautifulSoup 提供的 find_all 函數,並通過 class_ 參數確定所需的類:
>>> titles = soup.find_all('h3', class_ = 'post-title') #Getting all titles>>> titles[0].textu'\nKolkata #BergerXP IndiBlogger meet, Marketing Insights, and some Blogging Tips\n'>>>
只通過 post-title 類進行條目搜索應該可以得到相同的結果:
>>> titles = soup.find_all(class_ = 'post-title') #Getting all items with class post-title>>> titles[0].textu'\nKolkata #BergerXP
IndiBlogger meet, Marketing Insights, and some Blogging Tips\n'>>>
❷ Python2、3均為最新版,pycharm5社區版,import web web.application().run()總是報錯,請教解決方法
應該是埠被佔用,或者沒有指定埠的問題,你在python代碼里指定埠試試。
❸ linux下python和webpy怎麼搭建
基於python的web開發,這里我們使用linux為開發環境,搭建基於nginx + web.py + fastcgi
有些基本基本概念解釋下,哈哈,因為我不懂
1.wsgi為Web伺服器網關介面(Python Web Server Gateway Interface,縮寫為WSGI)是是為Python語言定義的Web伺服器和Web應用程序或框架之間的一種簡單而通用的介面。自從WSGI被開發出來以後,許多其它語言中也出現了類似介面
2.uwsgi,另一種python定義的web伺服器和web應用的介面
3.REST服務,REST(Representational State Transfer表述性狀態轉移)是一種針對網路應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。
4.CRUD是指在做計算處理時的增加(Create)、查詢(Retrieve)(重新得到數據)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。主要被用在描述軟體系統中資料庫或者持久層的基本操作功能
以下內容主要來自
http://webpy.org/cookbook/fastcgi-nginx
需要的軟體
nginx 0.7以上版本,我使用的是nginx 0.9.2
webpy我使用的web.py-0.37
spawn-fcgi 1.6.3
flup 1.0
nginx的配置請參看官方文檔
spawn-fcgi是lighttpd的一個子項目用於多進程管理
webpy和flup安裝方式為解壓後運行python setup.py install
安裝編寫index.py
點擊(此處)折疊或打開
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
app.run()
注意index.py需要使用命令chmod +x index.py加入可執行許可權
將index.py放入/data/www(我所使用的目錄你可以修改)
修改nginx.conf配置
index要加入index.py
Nginx的配置加入
點擊(此處)折疊或打開
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9002;
}
使用Spawn-fcgi
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002
如果報錯為126,說明index.py沒有可執行許可權
netstat -lnp | grep 9002參考是否啟動成功
我運行的實際為
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002 -F 2
啟動2個進程
啟動nginx
瀏覽器輸入地址
成功結束
❹ 初學python,練習web.py時報錯了,Import filename is not supported
第一張圖是完整文件嗎?有沒有被截斷?
另外運行一下這個命令,看看輸出:
python-i-c'importweb;printweb.__version__'
❺ 關於python中web.py的安裝
安裝命令:
pip install web.py,或者easy_install web.py
❻ python3環境下,搭建web,運行錯誤
Python大小寫是敏感的,你的那個get大寫跟小寫要一致,看看裡面那個get是大寫的,改成小寫試試看
❼ 想做Python Web 開發,需要掌握哪些技能
Python的學習內容還是比較多的,我們將學習的過程劃分為4個階段,每個階段學習對應的內容,具體的學習順序如下:
Python學習順序:
①Python軟體開發基礎
掌握計算機的構成和工作原理
會使用Linux常用工具
熟練使用Docker的基本命令
建立Python開發環境,並使用print輸出
使用Python完成字元串的各種操作
使用Python re模塊進行程序設計
使用Python創建文件、訪問、刪除文件
掌握import 語句、From…import 語句、From…import* 語句、方法的引用、Python中的包
能夠使用Python面向對象方法開發軟體
能夠自己建立資料庫,表,並進行基本資料庫操作
掌握非關系資料庫MongoDB的使用,掌握Redis開發
能夠獨立完成TCP/UDP服務端客戶端軟體開發,能夠實現ftp、http伺服器,開發郵件軟體
能開發多進程、多線程軟體
能夠獨立完成後端軟體開發,深入理解Python開發後端的精髓
能夠獨立完成前端軟體開發,並和後端結合,熟練掌握使用Python進行全站Web開發的技巧
能夠使用Python熟練編寫爬蟲軟體
能夠熟練使用Python庫進行數據分析
招聘網站Python招聘職位數據爬取分析
掌握使用Python開源人工智慧框架進行人工智慧軟體開發、語音識別、人臉識別
掌握基本設計模式、常用演算法
掌握軟體工程、項目管理、項目文檔、軟體測試調優的基本方法
②Python軟體開發進階
③Python全棧式WEB工程師
④Python多領域開發
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,中博軟體學院、南京課工場、南京北大青鳥等開設python專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
❽ python web.py has no attribute 'application'
這是模塊名沖突導致的。
你自己的文件不要命名為web.py,可以改名為myapp.py,然後再試一下。
❾ 如何用Python關閉打開的網頁
2、能夠調用操作系統的命令關閉瀏覽器
window命令是:taskkill /F/IM 應用名稱 ,如 taskkill /F /IM qq.exe 就關閉了qq
linux 命令是:killall(kill不建議使用) /F /IM qq.exe
python實現代碼如下:
import os
os.system('taskkill /F /IM qq.exe')
#linux中:os.system('killall /F /IM qq.exe')
3、實現打開網頁?次和關閉網頁?次,以及打開?次網頁後才關閉網頁
python實現代碼打開10次網頁後關閉一次,一下實現打開最少(10*count)次:
import webBrowe as web
import time
import os
import urllib
import random
#產生隨機數范圍:[1,9)
count=random.randint(1,10)
#定義變數控制循環結束
j=0
while j<=count :
#定義第count次打開次數
i=0
#打開瀏覽器的控制
while i<=9 :
#打開瀏覽器
web.open_new_tab("需要打開的地址")
#控制循環次數
i+=1
#留給瀏覽器反應時間:0.8s
time.sleep(0.8)
else :
#殺死程序,我使用的是360瀏覽器打開
os.system('taskkill /F /IM 360se.exe')
#控制外層循環
j+=1
注意:本文舉例是基於python 2.7版本,開發工具使用pycharm,
如果是python3.0以上版本可能不支持,部分方法需要稍微修改
❿ python作為web開發有沒有前途
有很好的前景,python既可用於前端還可用於後端開發。
Python是一種計算機編程語言,是一種動態的、面向對象的腳本語言,最初設計用於編寫自動腳本(shell)。越來越多地用於開發獨立的、大規模的項目,因為版本不斷更新,並添加了語言的新特性。
Python具有清晰而統一的設計風格,這使得Python成為一種易於閱讀、可維護的語言,受到大量用戶的歡迎。
設計師發展的一般指導原則是,對於一個特定的問題,只有一個最好的方法來解決它。
這在由TimPeters寫的Python格言(稱為TheZenofPython)裡面表述為:Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit。
這正好和Perl語言(另一種功能類似的高級動態語言)的中心思想TMTOWTDI(There'sMoreThanOneWayToDoIt)完全相反。
(10)importwebpython擴展閱讀:
Python的設計定位:
Python的設計哲學是「優雅」、「明確」、「簡單」。因此,Perl語言中「總是有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。
Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。
由於這種設計觀念的差異,Python源代碼通常被認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些准則被稱為Python格言。在Python解釋器內運行importthis可以獲得完整的列表。
Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合並到Python內。
所以很多人認為Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。
Python是一種完全面向對象的語言..函數,模塊,數字,字元串都是對象..並充分支持繼承、重載、派生、多繼承,有利於增強源代碼的重用。
Python支持重載運算符和動態類型,相對於Lisp這種傳統的功能編程語言,Python只為功能設計提供了有限的支持。兩個標准庫(functools,itertools)在Haskell和StandardML中提供了經過驗證的功能編程工具。
雖然Python可以大致歸類為「腳本語言」(腳本語言),但在實踐中,一些大型軟體開發程序,如Zope、Mnet和BitTorrent,谷歌也廣泛使用它。
Python支持者更喜歡稱之為高級動態編程語言,因為「腳本語言」一般是指只做簡單編程任務的語言,如shellscript,VBScript,只能處理簡單的任務,不能與Python進行比較。