介绍

目前许多网站大量运用 javascript 脚本进行一些页面的处理,这些页面的抓取对爬虫是个挑战。 这类页面的抓取,有下面几种方法

  1. 分析页面(firebug/chrome调试工具 等),找到ajax获取的数据源,看是否可以直接发请求获取
  2. 调用无界面依赖的浏览器引擎(headless browser) casperjs,phantomjs 获取最后的页面

第一种方法就不说了,主要是分析请求,主要说下第二种

用 selenium + phantomjs 抓取动态页面

1. pip 安装 selenium

pip install selenium

2. 去 phantomjs 下载 下载对应的包安装

3. 用下面的脚本测试,抓取拉钩的 Python开发招聘信息

#!/usr/bin/env python
# coding: utf-8


from selenium import webdriver
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver import ActionChains

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import bs4 as bs


def main():
    # 设置 user agent
    dcap = dict(DesiredCapabilities.PHANTOMJS)
    dcap['phantomjs.page.settings.userAgent'] = (
        'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'
    )
    driver = webdriver.PhantomJS(desired_capabilities=dcap)

    # 通过主页面获取相关session
    driver.get('http://www.lagou.com')
    driver.get('https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=')

    # 解析页面
    soup = bs.BeautifulSoup(driver.page_source, 'html.parser')
    # 使用 css 选择器
    items = soup.select('.con_list_item')

    # 输出招聘信息
    for item in items:
        print('*' * 40)
        print(item['data-company'])
        print(item['data-positionname'])
        print(item['data-salary'])
        # print(item)


if __name__ == '__main__':
    main()


执行结果

****************************************
二二一数据
python
10k-20k
****************************************
爱福窝
Python开发工程师
15k-30k
****************************************
易居中国-创新研发中心
Python开发工程师
15k-25k
****************************************
犇众信息
Python开发工程师
15k-20k
****************************************
美团点评
资深python开发工程师
20k-40k
****************************************
赢谊科技
Python
10k-20k
****************************************
华云数据
Python开发工程师
15k-25k
****************************************
新达达
Python
15k-25k
****************************************
进馨科技
Python开发工程师
15k-25k
****************************************
咖购
python开发工程师
15k-20k
****************************************
天玑科技
Python开发
15k-25k
****************************************
瞬联软件科技(北京)有限公司
python开发工程师
10k-15k
****************************************
Gridsum 国双
Python工程师(上海-静安区)
15k-25k
****************************************
东方财富
自动化测试(python&ruby)
10k-15k
****************************************
齐数科技(上海)有限公司
python工程师
10k-15k
right