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,内容以下:

相关文章
相关标签/搜索