python獲取網頁源代碼
㈠ python如何提取網頁信息
requests庫+ 正則表達式/dom庫/xpath庫等
㈡ 如何用用網路爬蟲代碼爬取任意網站的任意一段文字
網路爬蟲是一種自動化的程序,可以自動地訪問網站並抓取網頁內容。要用網路爬蟲代碼爬取任意網站的任肢哪意一段文字,可以按照如下步驟進行:
准備工作:需要了解目標網站的結構,以及想要爬取的文字所在的網頁的URL。此外,還需要選擇一種編程語言,如Python、Java、C++等,一般建議用PYTHON,因為有完善的工具庫,並准備好相應的編程環境。
確定目標:通過研究目標網站的結構,確定想要爬取的文字所在的網頁的URL。
獲取網頁源代碼:使用編程語言的相應庫歷孫碼(如Python的urllib庫),訪問目標網頁的URL,獲取網頁的源代碼。
解析網頁源代碼:使用編程語言的相應庫(如Python的BeautifulSoup庫),解析網頁源代凱運碼,找到想要爬取的文字所在的HTML標簽。
提取文字:獲取HTML標簽的文本內容,即為所要爬取的文字。
保存結果:將爬取的文字保存到文件中或資料庫中,以便後續使用。
㈢ Python網頁解析庫:用requests-html爬取網頁
Python 中可以進行網頁解析的庫有很多,常見的有 BeautifulSoup 和 lxml 等。在網上玩爬蟲的文章通常都是介紹 BeautifulSoup 這個庫,我平常也是常用這個庫,最近用 Xpath 用得比較多,使用 BeautifulSoup 就不大習慣,很久之前就知道 Reitz 大神出了一個叫 Requests-HTML 的庫,一直沒有興趣看,這回可算歹著機會用一下了。
使用 pip install requests-html 安裝,上手和 Reitz 的其他庫一樣,輕松簡單:
這個庫是在 requests 庫上實現的,r 得到的結果是 Response 對象下面的一個子類,多個一個 html 的屬性。所以 requests 庫的響應對象可以進行什麼操作,這個 r 也都可以。如果需要解析網頁,直接獲取響應對象的 html 屬性:
不得不膜拜 Reitz 大神太會組裝技術了。實際上 HTMLSession 是繼承自 requests.Session 這個核心類,然後將 requests.Session 類里的 requests 方法改寫,返回自己的一個 HTMLResponse 對象,這個類又是繼承自 requests.Response,只是多加了一個 _from_response 的方法來構造實例:
之後在 HTMLResponse 里定義屬性方法 html,就可以通過 html 屬性訪問了,實現也就是組裝 PyQuery 來干。核心的解析類也大多是使用 PyQuery 和 lxml 來做解析,簡化了名稱,挺討巧的。
元素定位可以選擇兩種方式:
方法名非常簡單,符合 Python 優雅的風格,這里不妨對這兩種方式簡單的說明:
定位到元素以後勢必要獲取元素裡面的內容和屬性相關數據,獲取文本:
獲取元素的屬性:
還可以通過模式來匹配對應的內容:
這個功能看起來比較雞肋,可以深入研究優化一下,說不定能在 github 上混個提交。
除了一些基礎操作,這個庫還提供了一些人性化的操作。比如一鍵獲取網頁的所有超鏈接,這對於整站爬蟲應該是個福音,URL 管理比較方便:
內容頁面通常都是分頁的,一次抓取不了太多,這個庫可以獲取分頁信息:
結果如下:
通過迭代器實現了智能發現分頁,這個迭代器裡面會用一個叫 _next 的方法,貼一段源碼感受下:
通過查找 a 標簽裡面是否含有指定的文本來判斷是不是有下一頁,通常我們的下一頁都會通過 下一頁 或者 載入更多 來引導,他就是利用這個標志來進行判斷。默認的以列表形式存在全局: ['next','more','older'] 。我個人認為這種方式非常不靈活,幾乎沒有擴展性。 感興趣的可以往 github 上提交代碼優化。
也許是考慮到了現在 js 的一些非同步載入,這個庫支持 js 運行時,官方說明如下:
使用非常簡單,直接調用以下方法:
第一次使用的時候會下載 Chromium,不過國內你懂的,自己想辦法去下吧,就不要等它自己下載了。render 函數可以使用 js 腳本來操作頁面,滾動操作單獨做了參數。這對於上拉載入等新式頁面是非常友好的。
㈣ python 用requests獲取網頁源代碼為什麼中文顯示錯誤
編輯器的編碼與網頁編碼不相符合。
一般編輯器統一用UTF-8,網頁用decode再encode到UTF-8即可
㈤ python爬蟲怎麼獲取動態的網頁源碼
一個月前實習導師布置任務說通過網路爬蟲獲取深圳市氣象局發布的降雨數據,網頁如下:
心想,爬蟲不太難的,當年跟zjb爬煎蛋網無(mei)聊(zi)圖的時候,多麼清高。由於接受任務後的一個月考試加作業一大堆,導師也不催,自己也不急。
但是,導師等我一個月都得讓我來寫意味著這東西得有多難吧。。。今天打開一看的確是這樣。網站是基於Ajax寫的,數據動態獲取,所以無法通過下載源代碼然後解析獲得。
從某不良少年寫的抓取淘寶mm的例子中收到啟發,對於這樣的情況,一般可以同構自己搭建瀏覽器實現。phantomJs,CasperJS都是不錯的選擇。
導師的要求是獲取過去一年內深圳每個區每個站點每小時的降雨量,執行該操作需要通過如上圖中的歷史查詢實現,即通過一個時間來查詢,而這個時間存放在一個hidden類型的input標簽里,當然可以通過js語句將其改為text類型,然後執行send_keys之類的操作。然而,我失敗了。時間可以修改設置,可是結果如下圖。
為此,僅抓取實時數據。選取python的selenium,模擬搭建瀏覽器,模擬人為的點擊等操作實現數據生成和獲取。selenium的一大優點就是能獲取網頁渲染後的源代碼,即執行操作後的源代碼。普通的通過 url解析網頁的方式只能獲取給定的數據,不能實現與用戶之間的交互。selenium通過獲取渲染後的網頁源碼,並通過豐富的查找工具,個人認為最好用的就是find_element_by_xpath("xxx"),通過該方式查找到元素後可執行點擊、輸入等事件,進而向伺服器發出請求,獲取所需的數據。
[python]view plain
#coding=utf-8
fromtestStringimport*
fromseleniumimportwebdriver
importstring
importos
fromselenium.webdriver.common.keysimportKeys
importtime
importsys
default_encoding='utf-8'
ifsys.getdefaultencoding()!=default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
district_navs=['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']
district_names=['福田區','羅湖區','南山區','鹽田區','寶安區','龍崗區','光明新區','坪山新區','龍華新區','大鵬新區']
flag=1
while(flag>0):
driver=webdriver.Chrome()
driver.get("hianCe/")
#選擇降雨量
driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()
filename=time.strftime("%Y%m%d%H%M",time.localtime(time.time()))+'.txt'
#創建文件
output_file=open(filename,'w')
#選擇行政區
foriinrange(len(district_navs)):
driver.find_element_by_xpath("//div[@id='"+district_navs[i]+"']").click()
#printdriver.page_source
timeElem=driver.find_element_by_id("time_shikuang")
#輸出時間和站點名
output_file.write(timeElem.text+',')
output_file.write(district_names[i]+',')
elems=driver.find_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")
#輸出每個站點的數據,格式為:站點名,一小時降雨量,當日累積降雨量
foreleminelems:
output_file.write(AMonitorRecord(elem.get_attribute("title"))+',')
output_file.write(' ')
output_file.close()
driver.close()
time.sleep(3600)
- 文件中引用的文件testString只是修改輸出格式,提取有效數據。
#Encoding=utf-8
defOnlyCharNum(s,oth=''):
s2=s.lower()
fomart=',.'
forcins2:
ifnotcinfomart:
s=s.replace(c,'')
returns
defAMonitorRecord(str):
str=str.split(":")
returnstr[0]+","+OnlyCharNum(str[1])
- 一小時抓取一次數據,結果如下:
[python]view plain
㈥ 如何用python提取網頁中框架的源代碼
簡單的乎答做個例子,框架路徑可以自己修改,調用像網路等網站時無法讀取其中源碼,攔灶涉及到一些安全問題,所以路徑要求是合法的允許歲衡慧訪問的路徑 function GetFrameInnerHtml(objIFrame) { var iFrameHTML = ""; if (objIFrame.contentDocument) { //針...
㈦ 如何用python爬蟲直接獲取被js修飾過的網頁Elements
獲得有價值的信息!但許多時候,爬蟲取到的頁面僅僅是一個靜態的頁面,即網頁的源代碼... 抓取js執行後的頁面,一個最直接的方式就是用python模擬瀏覽器的行為。
㈧ python,requests中獲取網頁源代碼,與右鍵查看的源代碼不一致,求解!!! 下面是代碼,不知有何錯誤
requests請求網址url = 'https://www..com/s?wd=周傑倫'後,print(res.text) #列印的只是url = 'https://www..com/s?wd=周傑倫 這一個請求返回的響應體內容,
而如下圖,右鍵查看的頁面源代碼是你請求的網頁url加上其他頁面內的js請求,圖片等靜態資源請求,css等最終形成的頁面,所以兩者不一樣的
㈨ python如何獲取網頁源碼中整個<body>的內容
一般是這樣,用request庫獲取html內容,然後用正則表達式獲取內容。比如:
import requests
from bs4 import BeautifulSoup
txt=requests.get("https://www.gov.cn/").text //抓取網頁
a=BeautifulSoup(txt,'html.parser') //構建解析器
print(a.body) //獲取內容,也可以是a.title或者其他的標記內容
㈩ python下用selenium的webdriver包如何取得打開頁面的html源代碼呢
這敏告個可以通過瀏覽器自帶的f12 。
或者通過滑鼠右鍵,審計元素獲得當前html源代碼。