❶ python 如何抓取動態頁面內容
下面開始說一下本文抓取動態頁面數據的相關工具和庫:
1. python 2.7
2. pyqt
3. spynner (在安裝過程中,其他的一些依賴庫也會自動上網下載安裝)
4. BeautifulSoup
5. ide工具是pycharm(當然這個只是個人喜好,也可以使用其他的ide工具)
以上幾個工具都可以網路找到,python現在出了3.x版本的,但是由於眾多第三方庫或架構都沒有兼容,並且後續要使用到的爬蟲框架scrapy也是沒有支持3.x版本,因此還是建議使用2.7版本吧。
spynner和BeautifulSoup下載後,都可以cd到解壓出來的目錄,然後使用python setup.py install來完成安裝,需要注意的是spynner依賴pyqt,所以一定要安裝pyqt,否則無法使用spynner。
下面使用一個具體是例子來說明一下spynner和BeautifulSoup的使用,我們就以爬取京東頁面上的一些產品數據來說明如何爬取動態頁面數據(當然,如果我們過於頻繁的爬京東,估計還是有可能被京東將我們ip拉黑的)。
❷ python怎麼獲取動態網頁鏈接
四中方法:
'''
得到當前頁面所有連接
'''
import requests
import re
from bs4 import BeautifulSoup
from lxml import etree
from selenium import webdriver
url = 'http://www.ok226.com'
r = requests.get(url)
r.encoding = 'gb2312'
# 利用 re
matchs = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')" , r.text)
for link in matchs:
print(link)
print()
# 利用 BeautifulSoup4 (DOM樹)
soup = BeautifulSoup(r.text,'lxml')
for a in soup.find_all('a'):
link = a['href']
print(link)
print()
# 利用 lxml.etree (XPath)
tree = etree.HTML(r.text)
for link in tree.xpath("//@href"):
print(link)
print()
# 利用selenium(要開瀏覽器!)
driver = webdriver.Firefox()
driver.get(url)
for link in driver.find_elements_by_tag_name("a"):
print(link.get_attribute("href"))
driver.close()
❸ 如何用python+selenium+phantomjs獲得一個網頁的動態生成的html代碼
一般我們使用python的第三方庫requests及框架scrapy來爬取網上的資源,但是設計javascript渲染的頁面卻不能抓取,此時,我們使用web自動化測試化工具Selenium+無界面瀏覽器PhantomJS來抓取javascript渲染的頁面,下面實現一個簡單的爬取
環境搭建
准備工具:python3.5,selenium,phantomjs
我的電腦裡面已經裝好了python3.5
安裝Selenium
1pip3 install selenium安裝Phantomjs
按照系統環境下載phantomjs,下載完成之後,將phantomjs.exe解壓到python的script文件夾下
使用selenium+phantomjs實現簡單爬蟲
123456789fromselenium import webdriverdriver = webdriver.PhantomJS()driver.get('http.com') #載入網頁data = driver.page_source #獲取網頁文本driver.save_screenshot('1.png') #截圖保存print(data)driver.quit()selenium+phantomjs的一些使用方法
設置請求頭里的user-Agent
123456789101112fromselenium import webdriverfromselenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdcap = dict(DesiredCapabilities.PHANTOMJS) #設置useragentdcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根據需要設置具體的瀏覽器信息driver = webdriver.PhantomJS(desired_capabilities=dcap) #封裝瀏覽器信息driver.get('h.com') #載入網頁data = driver.page_source #獲取網頁文本driver.save_screenshot('1.png') #截圖保存print(data)driver.quit()請求超時設置
webdriver類中有三個和時間相關的方法:
1.pageLoadTimeout 設置頁面完全載入的超時時間,完全載入即完全渲染完成,同步和非同步腳本都執行完
2.setScriptTimeout 設置非同步腳本的超時時間
3.implicitlyWait 識別對象的智能等待時間
1234567fromselenium import webdriverdriver = webdriver.PhantomJS()driver.set_page_load_timeout(5) #設置超時時間driver.get('htt.com')print(driver.title)driver.quit()設置瀏覽器窗口大小
調用啟動的瀏覽器不是全屏的,有時候會影響我們的某些操作,所以我們可以設置全屏
12driver.maximize_window() #設置全屏driver.set_window_size('480','800') #設置瀏覽器寬480,高800元素定位
import webdriverdriver = webdriver.PhantomJS()driver.set_page_load_timeout(5)driver.get('i.com')try:driver.get('.com')driver.find_element_by_id('kw') # 通過ID定位driver.find_element_by_class_name('s_ipt') # 通過class屬性定位driver.find_element_by_name('wd') # 通過標簽name屬性定位driver.find_element_by_tag_name('input') # 通過標簽屬性定位driver.find_element_by_css_selector('#kw') # 通過css方式定位driver.find_element_by_xpath("//input[@id='kw']") # 通過xpath方式定位driver.find_element_by_link_text("貼吧") # 通過xpath方式定位print(driver.find_element_by_id('kw').tag_name ) # 獲取標簽的類型except Exceptionase:print(e)driver.quit()操作瀏覽器前進或後退
import webdriverdriver = webdriver.PhantomJS()try:driver.get('httai.com') #訪問網路首頁driver.save_screenshot('1.png')driver.get('ht.sina.com.cn') #訪問新浪首頁driver.save_screenshot('2.png')driver.back() #回退到網路首頁driver.save_screenshot('3.png')driver.forward() #前進到新浪首頁driver.save_screenshot('4.png')except Exceptionase:print(e)driver.quit()好文要頂關注我收藏該文
❹ Python爬取動態生成的網頁(框架)需要具備哪些知識或者使用哪些庫
1、抓取網頁,模擬登陸等背後的通用的邏輯和原理;
2、以提取songtaste網頁中標題為例,詳解如何抓取網站並提取網頁內容;
3、以模擬登陸網路為例,詳解如何模擬登陸網站;
4、以抓取網易博客帖子中的最近讀者信息為例,詳解如何抓取動態網頁中的內容;
5、詳解了在模擬登陸和抓取動態網頁過程中,如何用對應的網頁分析工具,如IE9的F12,Chrome的Ctrl+Shift+J,Firefox的Firebug,去分析出對應的邏輯;
6、針對抓取網站,模擬登陸,抓取動態網頁,全部給出了完整的可用的,多種語言的示例代碼:Python,C#,Java,Go等。
❺ 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)
[python]view plain
#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爬取動態載入的網頁數據
動態網頁抓取都是典型的辦法
直接查看動態網頁的載入規則。如果是ajax,則將ajax請求找出來給python。 如果是js去處後生成的URL。就要閱讀JS,搞清楚規則。再讓python生成URL。這就是常用辦法
辦法2,使用python調用webkit內核的,IE內核,或者是firefox內核的瀏覽器。然後將瀏覽結果保存下來。通常可以使用瀏覽器測試框架。它們內置了這些功能
辦法3,通過http proxy,抓取內容並進行組裝。甚至可以嵌入自己的js腳本進行hook. 這個方法通常用於系統的反向工程軟體
❼ python 如何快速找到動態頁面的html代碼
兩個方法:
1.通過抓包工具獲取數據發送的地址,發送post請求獲取json內容
2.selenium 模擬瀏覽器訪問網站,獲取載入後的動態頁面html內容
❽ Python爬取動態生成的網頁需要具備哪些知識或者使用哪
需要網頁編程基礎,懂一些簡單的ajax,需要會一種網頁抓包調試工具。在Mozilla里有一個firebug。 如果有人教你,幾天。我遇到一個人,教了她一個星期也沒有弄會。 自己摸索有些難。可能也需要一個星期左右時間。