Python爬蟲系統化學習(2)

Python爬蟲系統學習(2)

動態網頁爬取

當網頁使用Javascript時候,不少內容不會出如今HTML源代碼中,因此爬取靜態頁面的技術可能沒法使用。所以咱們須要用動態網頁抓取的兩種技術:經過瀏覽器審查元素解析網頁的真實地址和使用Selenium模擬瀏覽器的方法。javascript

異步更新技術AJAX(Asynchronous Javascript And XML,異步Javascript 和XML):經過後臺與服務器進行少許的數據交互實現異步更新。css

Selenium模塊

百度解釋:Selenium [1] 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla FirefoxSafariGoogle ChromeOpera,Edge等。java

通俗來講就是Selenium能夠模擬瀏覽器去執行一些操做,雖然操做會慢,可是能夠用來爬取動態頁面,相較於request有更大的優勢。python

request與selenium訪問頁面的比較(防止混淆)

#request訪問
#!/usr/bin/python
#coding:utf-8
link="http://www.bilibili.com"
r=requestss.get(link)
print(r.text)

#selenium訪問
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver=webdriver.Firefox(executable_path=r'D:\geckodriver.exe')
#這裏的geckodriver.exe是驅動程序,最新版的selenium不添加是不會執行的
link="http://www.bilibili.com"
dirver.get(link)

能夠看到除了使用的庫不同,selenium還須要額外使用驅動程序,下載地址以下:git

下載地址:https://github.com/mozilla/geckodriver/releasesgithub

Selenium的有點在於,它能夠根據元素進行具體的選擇,整理以下:web

方法 做用 樣例
find_element_by_css_selector 經過class選擇 好比<div class='bdy-as'>test<div>能夠用driver.find_element_by_css_seletor('div.bdy-as')
find_element_by_xpath 經過xpath選擇 好比<form id="loginForm">能夠用driver.find_element_by_xpath("//form[@id='loginForm']")
find_element_by_id 經過id進行選擇 好比<div id="bdy-as">textL</div>能夠使用driver.find_element_by_id('bdy-as')
find_element_by_name 經過元素name選擇 好比<input name="username" type="text"/> driver.find_element_by_name('username')
find_element_by_tag_name 經過元素的名字進行選擇 比睿<h1>haha</h1>可以使用driver.find_element_by_tag_name('h1')

selenium高級操做:

根據selenium能夠對抓取內容進行限制,使用的是FirefoxProfile()這個函數去建立句柄瀏覽器

from selenium import webdriver
fp = webdriver.FirefoxProfile()
#禁止層疊樣式表CSS
fp.set_preference("permissions.default.stylesheet",2)
#禁止圖片加載
fp.set_preference("permissions.default.image",2)
#禁止JS的運行
fp.set_preference("javascript.enabled",false)

使用三種限制方法能夠加速對網頁的訪問服務器

Selenium實戰:爬取獵聘網滲透測試相關信息

因爲獵聘網有反爬以及我選擇的class存在缺憾,爬取到的只有崗位和薪資,欠缺了公司和地址,可是經過屢次被反爬我大概有了反反爬蟲的思路。異步

將爬取獵聘網的代碼列下,僅供參考:

#coding:utf-8
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver=webdriver.Firefox(executable_path=r'D:\geckodriver.exe')
link="https://www.liepin.com/zhaopin/?sfrom=click-pc_homepage-centre_searchbox-search_new&d_sfrom=search_fp&key=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95"
driver.get(link)
#找到文本框,輸入滲透測試,輸入回車
job_list=driver.find_elements_by_css_selector('div.job-info')
for each in job_list:
    name=each.find_element_by_tag_name('h3').text
    money=each.find_element_by_css_selector('span.text-warning').text
    edu=each.find_element_by_css_selector('span.edu').text
    ALL=name+money+edu+'\n'
    with open ('a.txt',"a+") as f:
        f.write(ALL)

爬取後文件夾下生成a.txt,內容以下:

相關文章
相關標籤/搜索