1. 程式人生 > >python爬取JS動態網頁完整指南(selenium+chrome headless)

python爬取JS動態網頁完整指南(selenium+chrome headless)

11.23:更新,每次還要開啟瀏覽器多影響執行效率,看到蟲師講了chrome headless,非常好用

引用新增:
from selenium.webdriver.chrome.options import Options 
程式碼新增:
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=chrome_options)

完整程式碼參考最下方

       ------------------------------------------------------------------簡單分割線------------------------------------------------------------------

11.22:最近,是的又是最近,前端元件優化,我需要做一個非常簡單但是機械的動作,就是點選各個頁面的連結,確保訪問都是正常的。於是想寫個指令碼, 簡單實現驗證網頁無效連結.

本以為是個很簡單的指令碼,但是寫著寫著發現爬取的網頁找不到<a>標籤,也找不到連結地址,和前端小夥伴詢問了一下,發現,html頁面需要執行js後才會展示,直接爬取無法獲得需要的資訊。

解決思路:

1. 右鍵inspect後最重要的一個資訊就是body部分有一個<div id='XXXX'>

2. 在網頁控制檯上執行 document.getElementById("ID").innerHTML可獲取html頁面資訊,所以我的整體思路就是基於如何在python腳本里執行js

3. 於是,全網搜尋,然大部分文章都一無所獲,嘗試了幾種網上提供的辦法,有一個看起來很靠譜的,是用dryscrape庫,說是開源瀏覽器引擎webkit可以解決這個問題,而dryscrape就是其中一個庫,可是,這個庫根本無法下載成功,浪費了不少時間,最後還是轉戰到selenium,所以安裝selenuim,並且下載對應的谷歌或火狐驅動。

4. 這個思路的另一個關鍵是一條語句:

html=driver.execute_script('return document.getElementById("ID").innerHTML')

5. 然後用正則表示式通過<a>標籤找到頁面的所有連結,至此,大部分工作已經完成。

具體程式碼如下,僅供參考:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options 
import re
from urllib.parse import urlparse,urljoin
import requests

url='目標地址' 如https://www.baidu.com
domain='域名' 如www.baidu.com

'''無頭瀏覽器模式,執行放在後臺'''
chrome_options=Options()
chrome_options.add_argument('--headless')

driver=webdriver.Chrome(executable_path='存放chrome驅動的路徑',chrome_options=chrome_options)
driver.get(url)
html=driver.execute_script('return document.getElementById("rc-root").innerHTML')
driver.quit()
pattern = '(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')'
links=re.findall(pattern,html)
print(links)
for link in links:
    result=urlparse(link)
    if result.netloc=='':
        if result.path=='[email protected]': #這是一個郵箱地址直接跳轉,我排除了該連結
            continue
        else:
            url_type='內部連結'
    else:
        if domain in link:
            url_type='內部連結'
        else:
            url_type='外部連結'
# 使用 urllib.parse.urljoin將相對的一個地址組合成一個url,對於輸入沒有限制,開頭必須是http://或者https://,否則將不組合前面的部分。
    try:
        response=requests.get(link)
        if 500>response.status_code>=400:
            print(f"{url_type}-{response.status_code}-{link} 失敗")
        else:
            print(f"{url_type}-{response.status_code}-{link} 成功")
    except Exception as e:
        print("出現異常:",e)

謝謝你的瀏覽,一切順利!

相關推薦

pythonJS動態網頁完整指南selenium+chrome headless

11.23:更新,每次還要開啟瀏覽器多影響執行效率,看到蟲師講了chrome headless,非常好用 引用新增: from selenium.webdriver.chrome.options import Options 程式碼新增: chrome_options =

使用pythonjs動態載入的網頁

原文地址:http://blog.csdn.net/lambert310/article/details/49248109 我們在做網頁抓取的時候,一般來說使用urllib和urllib2就能滿足大部分需求。 但是有時候我們遇見那種使用js動態載入的網頁。就會發現urllib只能抓出一個部分內容空白的

scrapy利用scrapy-splashJS動態生成的標籤

1 引言 scrapy處理爬取靜態頁面,可以說是很好的工具,但是隨著技術的發展,現在很多頁面都不再是靜態頁面了,都是通過AJAX非同步載入資料動態生成的,我們如何去解決問題呢?今天給大家介紹一種方法:scrapy-splash 2 準備工作 首先需要安裝一下幾個工具 (1)

JS動態生成的URL

愛卡汽車論壇搜尋結果頁面: 想要python爬取搜尋結果連結:a標籤中的href,但是這個url是動態生成的。 網頁原始碼: 用普通方式解析: import urllib.request url = "http://search.xcar.com.cn/metasea

Pythonajax動態載入內容

import requests import json import csv url= "https://movie.douban.com/j/chart/top_list?" params={ "type":17, "interval_id" :"100

通過天貓商品評論例項分析Pythonajax動態生成的資料

本文主要通過爬取天貓商品kindle的評論為例來說明利用python爬取ajax動態生成的資料的方式,本文使用的工具如下: 工具 chrome瀏覽器【尋找評論的動態連結】 python3.5【執行程式碼】 mysql【儲存爬蟲獲得

通過抓淘寶評論為例講解Pythonajax動態生成的資料

'https://rate.taobao.com/feedRateList.htm?auctionNumId=538039793643&userNumId=2779992133&currentPageNum=6&pageSize=20&rateType=&orderTy

Python異步加載的網站selenium+PhantomJS

ron .com .html scrip psu 語言 sel 文字 get 一個網站的爬蟲腳本,在調試的時候發現問題: 腳本跑:content-type用text/xml 可以post成功,但post中body的內容沒有生效,所有的響應都是當前日期;用applicatio

python新浪微博資料 無需手動獲取cookie)

從java 轉為python from selenium import webdriver import selenium from selenium.webdriver.common.desired_capabilities import DesiredCapabi

關於json內容生成詞雲瘋狂踩坑

.sh 動態 cnblogs google 插件 save result json數據 keys 本文爬取了掘金上關於前端前n頁的標題。將文章的標題進行分析,可以看出人們對前端關註的點或者近來的熱點。 導入庫 import requests import re from

HttpClient 實現百度搜索結果自動翻頁

如果你對HttpClient還不是很瞭解,建議先移步我的另一篇部落格HttpClient4.x之請求示例後再來看這篇部落格。我們這裡的專案採用maven搭建。在閱讀前要對jdk和maven有一定的瞭解。另外開發工具這裡我這裡使用的是:Spring Tool Suite(STS)當然你也可以使用其

用R語言rvest包獵聘網招聘資訊保證可重複性

前言 最近一直在思考動手做自己的第一個R語言資料分析專案,在R語言中文社群公眾號上看了許多爬取招聘網站的案例後,發現做招聘資訊分析是個不錯的選擇: 1. 整合並分析招聘資訊可以深入瞭解各個崗位的整體收入情況、學歷要求、經驗要求等,相信這是許多人都感興趣的;  2. 招聘網站的

scrapy 知乎登入認證部分採用cookie登入

scrapy 爬蟲,為非同步io框架;因此此處選擇,先用requests請求,儲存cookie檔案,然後scrapy爬取前,在入口處載入cookie。 * 登入,儲存cookie方法見前兩節,此處展示的是scrapy讀取cookie * 首先要明確,

python網頁包含動態js資訊3.7 +,2.7+

post_param = {'action': '', 'start': '0', 'limit': '1'} return_data =

python 世紀佳緣,經過js渲染過的網頁

lac 爬取 chrom chrome 方式 sea user 異步請求 header #!/usr/bin/python #-*- coding:utf-8 -*- #爬取世紀佳緣 #這個網站是真的煩,剛開始的時候用scrapy框架寫,但是因為剛接觸框架,碰到js渲染的

Python 網頁中JavaScript動態添加的內容

python tab sta exe div int rom ava script 使用 selenium + phantomjs 實現 1、準備環境 selenium(一個用於web應用程測試的工具)安裝:pip install seleniumphantomjs(是

python 動態網頁百度圖片

# python 3.6.3 import re import os from urllib import parse from urllib import request ################################################### # 搜尋關鍵字

Python 網頁中JavaScript動態新增的內容

使用 selenium + phantomjs 實現 1、準備環境 selenium(一個用於web應用程測試的工具)安裝:pip install selenium phantomjs(是一種無介面的瀏覽器,用於完成網頁的渲染)下載:http://phantomjs.or

Python 網頁中JavaScript動態新增的內容

當我們進行網頁爬蟲時,我們會利用一定的規則從返回的 HTML 資料中提取出有效的資訊。但是如果網頁中含有 JavaScript 程式碼,我們必須經過渲染處理才能獲得原始資料。此時,如果我們仍採用常規方法從中抓取資料,那麼我們將一無所獲。那麼,通過Web kit可以簡單解決這個

selenium+chromedrive js載入的動態網頁下拉才能顯示內容

from selenium import webdriver from selenium.webdriver.common.keys import Keys #呼叫鍵盤操作 from selenium.webdriver.chrome.options import Opt