本文目錄一覽:
- 1、如何用python解析網頁並獲得網頁真實的源碼
- 2、怎樣在Python中查詢相關函數的源代碼
- 3、如何用python提取網頁中框架的源代碼
- 4、python爬蟲怎麼獲取動態的網頁源碼
- 5、如何使用python或R抓取網頁被隱藏的源代碼
- 6、如何便攜python獲取頁面內嵌框架中的源代碼
如何用python解析網頁並獲得網頁真實的源碼
Python 2.7版本的話 代碼如下:
#!/usr/bin/env python
# -*- coding:utf8 -*-
import urllib
import urllib2
import string
import re
addr1 = 某個網址的地址(string format)
response1 = urllib.urlopen(addr1)
text1 = response1.read()
response1.close()
text1就是網頁的源代碼,可以print出來看。UTF8的代碼是為了確保能正確抓取中文。
怎樣在Python中查詢相關函數的源代碼
在 python 官網下載 Gzipped source tar ball, 解壓縮後, 會發現 Lib/os.py 文件這行代碼
from posix import *
可是沒有文件叫 posix.py 啊, 到底在那 ? 其實 posix module 是 builtin 的其中一分子,如下示範:
import sys
print sys.builtin_module_names
(*__builtin__*, *__main__*, *_ast*, *_codecs*, *_sre*, *_symtable*, *_warnings*, *_weakref*, *errno*, *exceptions*, *gc*, *imp*, *marshal*, *posix*, *pwd*, *signal*, *sys*, *thread*, *zipimport*)
所以要去 Modules 目錄查找 c 代碼, 你會看見 posixmodule.c, 打開它看見這行代碼:
{“listdir”, posix_listdir, METH_VARARGS, posix_listdir__doc__},
再尋找上面所得到的 posix_listdir method, 可以找到 listdir 源代碼:
static PyObject *
posix_listdir(PyObject *self, PyObject *args)
{
/* XXX Should redo this putting the (now four) versions of opendir
in separate files instead of having them all here… */
#if defined(MS_WINDOWS) !defined(HAVE_OPENDIR)
PyObject *d, *v;
HANDLE hFindFile;
BOOL result;
如何用python提取網頁中框架的源代碼
簡單的做個例子,框架路徑可以自己修改,調用像百度等網站時無法讀取其中源碼,涉及到一些安全問題,所以路徑要求是合法的允許訪問的路徑 function GetFrameInnerHtml(objIFrame) { var iFrameHTML = “”; if (objIFrame.contentDocument) { //針…
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 copy
# coding=utf-8
from testString import *
from selenium import webdriver
import string
import os
from selenium.webdriver.common.keys import Keys
import time
import sys
default_encoding = ‘utf-8’
if sys.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’)
# 選擇行政區
for i in range(len(district_navs)):
driver.find_element_by_xpath(“//div[@id='” + district_navs[i] + “‘]”).click()
# print driver.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)’]”)
#輸出每個站點的數據,格式為:站點名,一小時降雨量,當日累積降雨量
for elem in elems:
output_file.write(AMonitorRecord(elem.get_attribute(“title”)) + ‘,’)
output_file.write(‘\n’)
output_file.close()
driver.close()
time.sleep(3600)
文件中引用的文件testString只是修改輸出格式,提取有效數據。
[python] view plain copy
#Encoding=utf-8
def OnlyCharNum(s, oth=”):
s2 = s.lower()
fomart = ‘abcdefghijklmnopqrstuvwxyz0123456789,.’
for c in s2:
if not c in fomart:
s = s.replace(c, ”)
return s
def AMonitorRecord(str):
str = str.split(“:”)
return str[0] + “,” + OnlyCharNum(str[1])
一小時抓取一次數據,結果如下:
如何使用python或R抓取網頁被隱藏的源代碼
隱藏的源代碼?不知道你指的是什麼?我的理解有兩種,一是不在前段顯示,但是查看源代碼時有,二是,非同步載入的內容在前端和源代碼中均看不到,第一種很容易解決,想必你指的時第二種,解決方法有三種:
模擬瀏覽器,動態獲取,可以使用大殺器selenium工具
使用這種方法可以實現只要能看到就能抓取到,如滑鼠滑過,非同步載入等,因為他的行為可以與瀏覽器一模一樣,但是這種方式的效率卻是最低的,一般不到實在沒有辦法的時候不推薦使用。
執行js代碼
在python中執行非同步載入的js代碼,獲得一些諸如滑鼠滑過,下拉載入更多等,但是現在的網站中都有非常多的js代碼,要找到需要執行的目標js代碼時非常困難和耗時的,此外python對js的兼容性也不是很好,也不推薦使用。
找到非同步載入的json文件,最常用,最方便,最好用的方法,這是我平常抓取動態非同步載入網站時最常用的方法,可以解決我99%的問題。具體的使用方法是打開瀏覽器的開發者工具,轉到network選項,之後重新載入網頁,在network中的列表中找到載入過程中載入的需要動態非同步載入的json文件,以京東為例,如圖,第一張找到的是非同步載入的庫存信息的json文件,第二招找到的是非同步載入的評論信息的json文件:
具體更詳細的方法可以google或百度
如何便攜python獲取頁面內嵌框架中的源代碼
不好意思我按照你給的鏈接訪問提示,非法訪問,看來做了cookie或者ip或者refer驗證之類的 ,既然這樣的話,相信你是能訪問到這個頁面的。那麼我的建議是,用cookiejar訪問,之後用beautifulsoup或者其他你用著習慣的東西,抓這個地址出來(如果這個地址是固定的,完全可以跳過這一步),之後用opener和cookiejar跳轉到你提供的地址,然後read~
方向是這樣的。
原創文章,作者:BJYY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134562.html