日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python动态页面元素爬取_爬取动态网页python+Web kit

發布時間:2024/7/23 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python动态页面元素爬取_爬取动态网页python+Web kit 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章爬取動態網頁python+selenium+webdriver介紹了爬取動態網站的一種模擬瀏覽器的方法,該方法的優劣也很明顯

優:

可以模擬任何人的操作,輸入賬號密碼,點擊登錄等等操作

劣:

1.每次執行都要打開桌面上的Chrome瀏覽器(自動化測試需要)

2.瀏覽器的各個操作步驟都需要sleep幾秒進行等待,效率低

本文針對兩個劣點的進行解決

PhantomJS

webdriver有很多種類的瀏覽器比如Internet Explorer、Chrome和 Firefox等,PhantomJS是一個無界面的瀏覽器,可以解決第一個問題。

渲染的問題

一個含有 JS 渲染的網頁。想要抓取網頁中所有信息。如果我們利用 HTTP 方法無法獲得任何信息。

import requests

from lxml import html

# storing response

response = requests.get('http://pycoders.com/archive')

# creating lxml tree from response body

tree = html.fromstring(response.text)

# Finding all anchor tags in response

print tree.xpath('//div[@class="campaign"]/a/@href')

因為這是動態渲染的網站,我們只能拿到一堆還沒被解析為html的js代碼。

Web kit

什么是 Web kit呢?

Web kit 可以實現瀏覽器所能處理的任何事情。對于某些瀏覽器來說,Web kit就是其底層的網頁渲染工具。

Web kit 是 QT 庫的一部分,因此需要安裝 QT 和PyQT4 庫來使用Web kit

sudo apt-get install python-qt4

注意:

上篇文章中使用selenium+webdriver其實也是通過瀏覽器來進行渲染那些js,原理相同

解析數據

思路:我們首先通過 Web kit 發送請求信息,然后等待網頁被完全加載后將其賦值到某個變量中。接下來我們利用 lxml 從 HTML 數據中提取出有效的信息。

1.類 Render 可以用來渲染網頁,當我們新建一個 Render 類時,它可以將 url 中的所有信息加載下來并存到一個新的框架中。

import sys

from PyQt4.QtGui import *

from PyQt4.Qtcore import *

from PyQt4.QtWebKit import *

class Render(QWebPage):

def __init__(self, url):

self.app = QApplication(sys.argv)

QWebPage.__init__(self)

self.loadFinished.connect(self._loadFinished)

self.mainFrame().load(QUrl(url))

self.app.exec_()

def _loadFinished(self, result):

self.frame = self.mainFrame()

self.app.quit()

2.利用以上的代碼我們將 HTML 結果儲存到變量 result 中

url = 'http://pycoders.com/archive/'

# This does the magic.Loads everything

r = Render(url)

# Result is a QString.

result = r.frame.toHtml()

3.轉換數據格式并解析

# QString should be converted to string before processed by lxml

formatted_result = str(result.toAscii())

# Next build lxml tree from formatted_result

tree = html.fromstring(formatted_result)

# Now using correct Xpath we are fetching URL of archives

archive_links = tree.xpath('//div[@class="campaign"]/a/@href')

print archive_links

總結

1.動態網站爬取核心步驟是渲染js

2.python+selenium+webdriver方式是模擬出真實環境解決的,既可以解決渲染,又可以附帶很多人的操作(輸入、點擊、最大化等),功能強大但是純采集的話效率略低

3.python+Web kit方式直接把渲染的核心部件拿出來進行解決,這種方式簡單直接,作為純采集來說是首選,但是受限于需要登錄驗證的網站

總結

以上是生活随笔為你收集整理的python动态页面元素爬取_爬取动态网页python+Web kit的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。