selenium爬取拉勾

简介: 用到的知识点:selenium 显式等待两个窗口的切换'''用selenium爬取拉勾'''from lxml import etreefrom selenium import webdriverfrom selenium.

用到的知识点:

  • selenium 显式等待
  • 两个窗口的切换
'''用selenium爬取拉勾'''
from lxml import etree
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import xlrd,xlwt,re,codecs,time

class LagouSpider():
    def __init__(self):
        self.url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
        self.browser = webdriver.Chrome()
        self.wait = WebDriverWait(self.browser,10)


    def run(self):
        self.browser.get(self.url)
        while True:
            text = self.browser.page_source
            # 提取具体页面的url
            self.parse_page(text)
            # 提取下一页的按钮,注意class的值中有空格不可用。
            next_btn = self.wait.until(EC.presence_of_element_located((By.XPATH,'//div[@class="pager_container"]/span[last()]')))
            # 判断是否是最后一页,如果是,退出while循环
            if 'pager_next pager_next_disabled' in next_btn.get_attribute('class'):
                break
            else:
                next_btn.click()
                time.sleep(1)

    # 提取具体页面的url
    def parse_page(self,text):
        html = etree.HTML(text)
        # 判断所需元素是否加载出来
        self.wait.until(EC.presence_of_element_located((By.XPATH,'//a[@class="position_link"]')))
        detial_urls = html.xpath('//a[@class="position_link"]/@href')
        for detial_url in detial_urls:
            # 请求详情页
            self.request_detial_url(detial_url)
            time.sleep(1)
            # 提取之后,把当前的页面关闭

    # 请求详情页
    def request_detial_url(self,detial_url):
        # 解析具体页面的字段信息时候,打开了另一个页面,覆盖原来的页面,我们这里做的是利用while True循环来获取全部页面的字段信息
        # 所以第一个页面的窗口不能关闭
        self.browser.execute_script("window.open('%s')" % detial_url) # 打开另一个窗口
        self.browser.switch_to.window(self.browser.window_handles[1]) # 切换到另一个窗口
        source = self.browser.page_source
        # 解析详情页的具体字段
        self.parse_detial_url(source)
        # 请求完之后关闭当前详情页的页面
        self.browser.close()
        # 切换回第一页
        self.browser.switch_to.window(self.browser.window_handles[0]) # 切换到首页

    # 解析详情页的具体字段
    def parse_detial_url(self,source):
        text = etree.HTML(source)
        # 判断所需元素是否加载出来
        self.wait.until(EC.presence_of_element_located((By.XPATH,'//span[@class="name"]')))
        name = text.xpath('//span[@class="name"]/text()')[0]
        salsry = text.xpath('//dd[@class="job_request"]/p[1]/span[1]/text()')[0].strip()
        city = text.xpath('//dd[@class="job_request"]/p[1]/span[2]/text()')[0]
        city = re.sub(r'[\s/]', '', city)
        work_years = text.xpath('//dd[@class="job_request"]/p[1]/span[3]/text()')[0]
        work_years = re.sub(r'[\s/]', '', work_years)
        job_advantage = text.xpath('//dd[@class="job-advantage"]/p/text()')[0]
        desc = ''.join(text.xpath('//dd[@class="job_bt"]//text()')).strip()
        print(name,salsry,city,work_years,job_advantage)

        output = ('{}\t{}\t{}\t{}\t{}\n').format(name, salsry,city,work_years,job_advantage)
        f = codecs.open('lagou.xls', 'a+')
        f.write(output)
        f.close()


def main():
    spider = LagouSpider()
    spider.run()

if __name__ == '__main__':
    main()
目录
相关文章
|
8天前
|
Web App开发 前端开发 IDE
Airtest-Selenium实操小课①:爬取新榜数据
Airtest-Selenium实操小课①:爬取新榜数据
|
JavaScript 大数据 应用服务中间件
Python网络爬虫(JSON, Phantomjs, selenium/Chromedirver,豆瓣电影、斗鱼直播、京东商城爬取)
python、python爬虫、网络爬虫、爬虫框架、selenium、requests、urllib、数据分析、大数据、爬虫爬取静态网页、爬虫基础、自动化测试、json、动态加载、反爬虫
3464 0
|
8天前
|
Web App开发 IDE 测试技术
实战练习:用airtest-selenium脚本爬取百度热搜标题
实战练习:用airtest-selenium脚本爬取百度热搜标题
|
9月前
|
XML 数据采集 JSON
scrapy_selenium爬取Ajax、JSON、XML网页:豆瓣电影
在网络爬虫的开发过程中,我们经常会遇到一些动态加载的网页,它们的数据不是直接嵌入在HTML中,而是通过Ajax、JSON、XML等方式异步获取的。这些网页对于传统的scrapy爬虫来说,是很难直接解析的。那么,我们该如何使用scrapy_selenium来爬取这些数据格式的网页呢?本文将为你介绍scrapy_selenium的基本原理和使用方法,并给出一个实际的案例。
|
9月前
|
Web App开发 数据采集 存储
如何使用Selenium Python爬取动态表格中的多语言和编码格式
Selenium是一个用于自动化Web浏览器的工具,它可以模拟用户的操作,如点击、输入、滚动等。Selenium也可以用于爬取网页中的数据,特别是对于那些动态生成的内容,如表格、图表、下拉菜单等。本文将介绍如何使用Selenium Python爬取一个动态表格中的多语言和编码格式的数据,并将其保存为CSV文件。
141 0
如何使用Selenium Python爬取动态表格中的多语言和编码格式
|
9月前
|
数据采集 存储 Web App开发
如何使用Selenium Python爬取动态表格中的复杂元素和交互操作
Selenium是一个自动化测试工具,可以模拟浏览器的行为,如打开网页,点击链接,输入文本等。Selenium也可以用于爬取网页中的数据,特别是那些动态生成的数据,如表格,图表,下拉菜单等。本文将介绍如何使用Selenium Python爬取动态表格中的复杂元素和交互操作。
251 0
如何使用Selenium Python爬取动态表格中的复杂元素和交互操作
|
10月前
|
数据采集 存储 Web App开发
如何使用Selenium Python爬取多个分页的动态表格并进行数据整合和分析
在网络爬虫的领域中,动态表格是一种常见的数据展示形式,它可以显示大量的结构化数据,并提供分页、排序、筛选等功能。动态表格的数据通常是通过JavaScript或Ajax动态加载的,这给爬虫带来了一定的挑战。本文将介绍如何使用Selenium Python这一强大的自动化测试工具来爬取多个分页的动态表格,并进行数据整合和分析。
298 0
|
10月前
|
数据采集 Web App开发 JavaScript
如何使用Selenium自动化Firefox浏览器进行Javascript内容的多线程和分布式爬取
在本文中,我们将介绍如何使用Selenium自动化Firefox浏览器进行Javascript内容的多线程和分布式爬取。我们将以一个简单的示例为例,抓取百度搜索结果页面中的标题和链接,并将结果保存到本地文件中。我们将使用Python语言编写代码,并使用爬虫代理服务器来隐藏我们的真实IP地址。
106 0
如何使用Selenium自动化Firefox浏览器进行Javascript内容的多线程和分布式爬取
|
数据采集 JavaScript 前端开发
Selenium+代理爬取需要模拟用户交互的网站
Selenium+代理爬取需要模拟用户交互的网站
|
数据采集 Web App开发 存储
使用 Scrapy + Selenium 爬取动态渲染的页面
使用 Scrapy + Selenium 爬取动态渲染的页面
408 0
使用 Scrapy + Selenium 爬取动态渲染的页面