爬蟲再探實戰(三)———爬取動態加載頁面——selenium


    自學python爬蟲也快半年了,在目前看來,我面臨着三個待解決的爬蟲技術方面的問題:動態加載,多線程並發抓取,模擬登陸。目前正在不斷學習相關知識。下面簡單寫一下用selenium處理動態加載頁面相關的知識。目標——抓取頁面所有的高考錄取分數信息。

    對於動態加載,開始的時候是看到Selenium+Phantomjs的強大,直接就學的這個。打開網頁查看網頁源碼(注意不是檢查元素)會發現要爬取的信息並不在源碼里面。也就是說,從網頁源碼無法通過解析得到數據。Selenium+Phantomjs的強大一方面就在於能將完整的源碼抓取到,上代碼。

from selenium import webdriver

def get_grade(url):
    print(url)
    #匿名爬蟲
    #假定9999端口開啟tor服務
    service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]
    driver = webdriver.PhantomJS(executable_path=這里是PhantomJS的絕對路徑)
    driver.get(url)
    data = driver.page_source
    print(data)

get("http://gkcx.eol.cn/soudaxue/queryProvince.html?page=1")

  這里還用到了匿名爬蟲,這里呢我也只是到了能用的水平,具體原理還不太懂。。。這樣就能拿到完整的源碼,是不是很簡單呢?當然簡單啦,不過簡單的代價就是犧牲速度。

這個程序還不算復雜,當抓取量大的時候,模擬抓取的效率就會變得很低(還不會多線程。。。不知道用多線程能不能提速)。下面是此項目的完整代碼:

import xlsxwriter
from selenium import webdriver
from bs4 import BeautifulSoup

def get_grade(url):
    print(url)
    #匿名爬蟲
    #假定9999端口開啟tor服務
    service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]
    driver = webdriver.PhantomJS(executable_path=r"F:\Techonolgoy\Python\file\spider\spider_tools\JS\1\phantomjs.exe")
    driver.get(url)
    data = driver.page_source
    # print(data)

    soup = BeautifulSoup(data, 'lxml')
    grades = soup.find_all('tr')
    for grade in grades:
        global i
        if '<td>' in str(grade):
            i += 1
            print(i)
            grade_text =grade.get_text()
            print(grade_text)
            grade_text = str(grade_text)
            city = grade_text[:-13]
            worksheet.write(i,0,city)
            time = grade_text[-13:-9]
            worksheet.write(i,1,time)
            subs = grade_text[-9:-7]
            worksheet.write(i,2,subs)
            s = grade_text[-7:-3]
            worksheet.write(i,3,s)
            grade = grade_text[-3:]
            worksheet.write(i,4,grade)

i = -1
workbook = xlsxwriter.Workbook('grades.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A',10)
worksheet.set_column('B:B', 10)
worksheet.set_column('C:C', 10)
worksheet.set_column('D:D', 10)
worksheet.set_column('E:E', 10)

urls = ['http://gkcx.eol.cn/soudaxue/queryProvince.html?page='+str(num)
        for num in range(1,166)]

for url in urls:
    get_grade(url)
workbook.close()

  家里面網速太慢,一共用了20分鍾才爬取完畢。。。抓取到的EXCEL文件格式如下:

    我是被這模擬抓取的龜速折磨的夠心累的,所以,經大牛們指點,找到了處理這類問題的另一個方法——直接清求json文件獲取數據!這個放到下面再寫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM