精华内容
下载资源
问答
  • selenium 爬虫

    万次阅读 2018-12-29 17:33:27
    3.该事例中对selenium的方法进行了封装,读者可以 pip install SpiderTool==19.1.1 该模块对selenium的方法镜像了更细的封装,方便快速开发 4.代码样例: #!/usr/bin/env python # _*_ coding:utf-8 _*_ "&...

    1.事例:启信宝
    2.浏览器:火狐,谷歌,phantomjs均可以使用
    3.该事例中对selenium的方法进行了封装,读者可以

    pip install SpiderTool==19.1.1
    

    该模块对selenium的方法镜像了更细的封装,方便快速开发

    4.代码样例:

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    
    """
    File:   .py
    Author: Lijiacai ()
    Date: 2018-12-29
    Description:
    """
    
    import os
    import re
    import sys
    import random
    from SpiderTool import Request
    from SpiderTool import Browser
    from loggingtool import loggingtool
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from lxml import etree
    
    # 这是一个日志记录器,相关loggingtool,通过pip install loggingtool可以查看源码
    logging = loggingtool.init_log("qxb", "console", level="NOTSET")
    
    cur_dir = os.path.split(os.path.realpath(__file__))[0]
    sys.path.append("%s/" % cur_dir)
    
    
    def proxy_deal(proxies):
        """
        get proxy
        If there are other agents, change the function here.
        :return: return a ip:12.23.88.23:2345
        """
        if not proxies:
            one_proxy = None
        elif type(proxies) == list:
            one_proxy = random.choice(proxies)
        else:
            one_proxy = None
        if one_proxy == None:
            logging.info("self ip")
        return one_proxy
    
    
    class MyRequest(Request.Request):
        """change proxy function to use api proxy"""
    
        def proxy(self):
            """
            get proxy
            If there are other agents, change the function here.
            :return: return a ip:12.23.88.23:2345
            """
            one_proxy = proxy_deal(self.proxies)
            return one_proxy
    
    
    class MyBrowser(Browser.Browser):
        """change proxy function to use api proxy"""
    
        def proxy(self):
            """
            get proxy
            If there are other agents, change the function here.
            :return: return a ip:12.23.88.23:2345
            """
            one_proxy = proxy_deal(self.proxies)
            return one_proxy
    
    
    class Qxb(object):
        """qixinbao code"""
    
        def __init__(self, proxies=None):
            self.proxies = proxies
    
        def search_page(self, keyword):
            """
            搜索页
            :param keyword: 随意给,e.g 百度
            :return:
            """
            result = []
            try:
                url = "https://m.qixin.com/"
                browser = MyBrowser(proxies=self.proxies, headless=False, timeout=20,
                                    executable_path=None,
                                    browser_type="Firefox")
    
                browser.get(url=url)
                input_k = browser.find_element(value=u"//input[@placeholder='请输入企业名,人名,品牌名等']",
                                               by=By.XPATH)
                browser.send_keys(input_k, keyword)
                browser.keys(input_k, keyboard=Keys.ENTER)
                try:
                    browser.wait_for_element_loaded("btn-primary", elem_type=By.CLASS_NAME,
                                                    wait_time=3)
                    button_k = browser.find_elements(value=u"btn-primary", by=By.CLASS_NAME)
                    for i in button_k:
                        browser.click_elem(i)
    
                except Exception as e:
                    logging.exception(u"No validate")
                browser.implicitly_wait(3)
                html = browser.page_source()
                page = etree.HTML(html)
                href_s = page.xpath("//a/@href")
                for href in href_s:
                    if re.findall(r"^/company/", href):
                        company = {
                            "url": "https://m.qixin.com%s" % href,
                            "company_id": href,
                            "company_name": "",
                            "company_status": "",
                            "history_names": []
                        }
                        result.append(company)
            except Exception as e:
                logging.exception(str(e))
            return result
    
        def result_page(self, url, company_id=None, **kwargs):
            """获取对应搜索页的详细工商信息"""
            url = url + "/info/"
            browser = MyBrowser(proxies=self.proxies, headless=False, timeout=20,
                                executable_path=None,
                                browser_type="Firefox")
    
            browser.get(url="view-source:" + url)
            try:
                browser.wait_for_element_loaded("btn-primary", elem_type=By.CLASS_NAME,
                                                wait_time=3)
                button_k = browser.find_elements(value=u"btn-primary", by=By.CLASS_NAME)
                for i in button_k:
                    browser.click_elem(i)
            except Exception as e:
                logging.exception(u"No validate")
            # browser.get(url="view-source:" + url)
            print browser.browser.current_url
            browser.implicitly_wait(3)
            html = browser.page_source()
            return html
    
    
    if __name__ == '__main__':
        qxb = Qxb()
        # qxb.search_page("baidu")
        print qxb.result_page(url="https://m.qixin.com/company/5e5641da-211e-40ed-9629-b421f4cf1416")
        # pass
    
    
    展开全文
  • selenium爬虫

    2018-07-03 05:25:01
    selenium本来说是用于测试的工具,但是因为可以自动化登录以及操作的情形,可以用于一些动态页面加载的爬虫情况,这里主要记录一些简单使用技巧和注意的事,具体内容可以参考Python模块的中文文档:...

    借助selenium爬取数据

    selenium本来说是用于测试的工具,但是因为可以自动化登录以及操作的情形,可以用于一些动态页面加载的爬虫情况,这里主要记录一些简单使用技巧和注意的事,具体内容可以参考Python模块的中文文档:http://selenium-python-zh.readthedocs.io/en/latest/index.html


    安装

    Python包的安装很简单,pip install即可,注意的是需要浏览器相应的driver。比如chrome需要对应的驱动,参考链接:https://sites.google.com/a/chromium.org/chromedriver/downloads

    里面是一个exe的程序,需要放到系统变量中,特别的在windows中,需要在环境变量中配置,比如放置到system32中就可以在Python中调用。

    具体操作细节问题汇总

    参考中文文档很快就会,以后会更新一些细节问题。

    (1) Selenium Compound class names not permitted
    在搜索click button时,有些button的class名比较复杂,如:

    <a class="btn btn-primary more-btn load-more" href="#" style="display: block;">Load More</a>

    其中的class名是复合型的,不能直接用代码:

    but = driver.find_element_by_class_name('btn btn-primary more-btn load-more')

    而应当用:

    but = driver.find_element_by_css_selector('.btn.btn-primary.more-btn.load-more')
    but.click()

    (2) scrapy 页面测试和提取
    我通常都是把返回的html页面保存在本地,在于bs4进行测试提取。

    with open('test.html','w') as f:
        f.write(response.text)

    有想到的再补充。

    展开全文
  • selenium爬虫技术

    2019-02-14 16:01:31
    selenium爬虫抓取技术,我们的祖国是花园,花园里花朵真鲜艳
  • selenium爬虫,selenium自动测试,WebDriver。 基于java+selenium的爬虫技术。selenium自动化。selenium+WebDriver, selenium+java,selenium java,java爬虫技术selenium

    selenium爬虫,selenium自动测试,WebDriver。

    A :下载

    對應的selenium和Driver版本下载链接
    **注意:selenium和WebDriver版本要对应
    把WebDriver(我用的IE的IEDriverServer.exe)放到本地文件夹下,设置环境变量path,指定到该路径。

    B:引入seleniumjar包

    这里用普通的java project方式练手的。当然可以直接maven引入依赖
    在这里插入图片描述

    C:创建项目,实例化Driver

    		// 指定Driver的位置
    		System.setProperty("webdriver.ie.driver", "F:\\Driver\\IEDriverServer.exe"); // 必须加
    		// 实例化一个driver对象
    		WebDriver d = new InternetExplorerDriver();
    

    D: 应用

    下面的完成代码有注释,很清楚的:

    package com.kone;
    import java.io.File;
    import java.io.IOException;
    import org.openqa.selenium.By;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.io.FileHandler;
    
    public class SeleniumTest {
    	public static void main(String[] args) throws InterruptedException, IOException {
    		// 指定Driver的位置
    		System.setProperty("webdriver.ie.driver", "F:\\Driver\\IEDriverServer.exe"); // 必须加
    		// 实例化一个driver对象
    		WebDriver d = new InternetExplorerDriver();
    		// 打开网页
    		d.get("http://www.baidu.com/");
    		// 获得网页标题
    		System.out.println("d.getTitle():" + d.getTitle());
    		// 当前页面的url
    		//System.out.println("d.getPageSource():" + d.getPageSource());
    		// 最大化窗口
    		d.manage().window().maximize();
    		// 关闭当前窗口,如果只有一个窗口,则关闭浏览器
    		// d.close();
    		// 关闭webdriver启动的所有窗口
    		// d.quit();
    		// 使用navigate.to打开指定网页地址:百度新闻
    		d.navigate().to("http://news.baidu.com/");
    		Thread.sleep(1000);
    		// 点击打开另一个页面:国内新闻
    		d.findElement(By.linkText("国内")).click();
    		Thread.sleep(1000);
    		// 使用navigate.back返回到百度新闻页
    		d.navigate().back();
    		Thread.sleep(1000);
    		// 使用navigate.forward返回到百度国内新闻页
    		d.navigate().forward();
    		Thread.sleep(1000);
    		// 使用navigate.refresh刷新当前页面
    		d.navigate().refresh();
    		d.navigate().to("http://www.baidu.com/");
    		// 输入查询关键字
    		d.findElement(By.id("kw")).sendKeys("a");
    		try {
    			// 点击查询按钮,此处id给了错误的所以失败后会走到catch分支进行截图
    			d.findElement(By.id("su112233")).click();
    		} catch (Exception e) {
    			// 失败后调用下面的getScreenShot方法进行截图
    			//将WebDriver类型的对象转换成TakesScreenshot类型的对象,以方便用它的抓图的方法
    			TakesScreenshot srcShot = (TakesScreenshot) d;
    			//利用getScreenshotAs()实现截图并将截图保存到srcFile中
    		    File srcFile = srcShot.getScreenshotAs(OutputType.FILE);
    		    File desFile = new File("D:\\srcShots.png");
    		    FileHandler.copy(srcFile, desFile);
    		}
    	}
    }
    

    E:其他应用

    1. 元素的定位

    Selenium

    自动化,我们需要做的最基本的事情就是在页面找到元素并通过脚本程

    序去操作这个元素,实现模拟人工操作。我们有多种定位元素的方式可以选择:

    通过元素的

    ID定位元素:

    findElement(By.id(element));

    通过元素的名称定位元素:

    findElement(By.name(element));

    通过元素的html中的位置定位元素:

    findElement(By.xpath(element));

    通过元素的标签名称定位元素:

    findElement(By.tagName(element));

    通过元素的链接名称定位元素:

    findElement(By.linkText(element));

    通过元素的类名定位元素:

    findElement(By.className(element));

    通过元素的css定位元素:

    findElement(By.cssSelector(element));

    通过元素的部分链接名称定位元素:

    findElement(By.partialLinkText(element));

    2. 元素的操作

    不同的元素我们进行不同的操作,按钮的点击、输入框的字符输入、或者是元素的内

    容获取,不同的元素我们操作的方式不一。

    对ID为element的元素进行点击操作:

    driver.findElement(By.id(element)).click();

    对ID为element的元素进行发送字符操作:

    driver.findElement(By.id(element)).sendKeys(“XXXXXX”);
    这里只举用的最多且最简单的的两例元素的操作,

    还有的是先获取元素后,再单独操作

    WebElement text1 = driver.findElement(By.name(“password”));
    text1.sendKeys(“123456”);

    3.页面操作

    模拟鼠标点击:driver.click();
    打开网页:driver.get(“https://www.baidu.com”);
    关闭网页:driver.close();

    在输入框中输入内容:text.sendKeys(“”);
    清空输入框中的内容:text.clear();
    获取输入框中的内容:text.getText();

    选择下拉框中的元素:
    Select select = new Select(wd.findElement(By.id(“select”)));

    切换到某个frame:
    driver.switchTo().frame("");

    从一个frame切换到另一个frame:
    driver.switchTo().frame("");

    切换到某个window:
    driver.switchTo().window(“windowName”);

    返回父iframe:(一般在跳转frame之前都写上这个语句)
    driver.switchTo().defaultContent();

    刷新页面:driver.navigate().refresh();

    页面前进后退:
    driver.navigate().forward();

    driver.navigate().back();

    4.输入框(text field or textarea)

    输入框(text field or textarea)

    WebElement element = driver.findElement(By.id("passwd-id"));
    
    element.sendKeys(“test”);//在输入框中输入内容:
    element.clear();       //将输入框清空
    element.getText();     //获取输入框的文本内容: 
    
    5.下拉框下拉选择框(Select)
    Select select = new Select(driver.findElement(By.id("select")));  
    
    select.selectByVisibleText(“A”);
    select.selectByValue(“1”); 
    select.deselectAll();
    select.deselectByValue(“1”);
    select.deselectByVisibleText(“A”);
    select.getAllSelectedOptions();
    select.getFirstSelectedOption(); 
    
    6.单选项(Radio Button)
    ebElement radio=driver.findElement(By.id("BookMode"));
    
    radio.click();       //选择某个单选项
    radio.clear();      //清空某个单选项
    radio.isSelected();  //判断某个单选项是否已经被选择
    
    7.多选项(checkbox)
    WebElement checkbox = driver.findElement(By.id("myCheckbox."));
    
    checkbox.click();
    checkbox.clear();
    checkbox.isSelected();
    checkbox.isEnabled();
    
    8:按钮(button)
    WebElement btn= driver.findElement(By.id("save"));
    
    btn.click();      //点击按钮
    btn.isEnabled ();  //判断按钮是否enable
    
    9.弹出对话框(Popup dialogs)处理
    Alert alert = driver.switchTo().alert();
    
    alert.accept();  //确定
    alert.dismiss();  //取消
    alert.getText(); //获取文本
    
    10.表单(Form)
    Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
    
      WebElement approve = driver.findElement(By.id("approve"));
    
      approve.click();
    或
      approve.submit();//只适合于表单的提交
    
    11.上传文件
    WebElement adFileUpload =driver.findElement(By.id("WAP-upload"));
    
      String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";
    
      adFileUpload.sendKeys(filePath);
    
    12.Windows 和 Frames之间的切换
    • driver.switchTo().defaultContent();     //返回到最顶层的frame/iframe
    • driver.switchTo().frame(“leftFrame”);    //切换到某个frame:
    • driver.switchTo().window(“windowName”); //切换到某个window
    13.调用Java Script

    Web driver对Java Script的调用是通过JavascriptExecutor来实现的,例如:
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript(“JS脚本”);

    14. 超时设置
    WebDriver driver = new FirefoxDriver();
    
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);      //识别元素时的超时时间
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);  //页面加载时的超时时间
    driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);  //异步脚本的超时时间
    
    展开全文
  • 使用selenium爬虫抓取数据

    万次阅读 2018-09-19 17:45:35
    使用selenium爬虫抓取数据 文章目录使用selenium爬虫抓取数据@[toc]总体介绍Selenium安装安装火狐浏览器插件Katalon Recorder简单教程抓取网易房地产数据例子参考链接 总体介绍 Selenium 简单入门教程 使用 ...


    总体介绍

    • Selenium 简单入门教程
    • 使用 Selenium 模拟访问网易数据中心的房价数据
    • 使用 Pandas 处理数据
    • 使用 Matplotlib 绘制图表

    Selenium

    安装

    • conda install selenium 或 pip install selenium
    • 下载浏览器驱动。在 selenium 的 download 页面,Third Party Drivers 处下载对应浏览器驱动,或使用下方链接
    • Linux 和 MacOS 用户下载好之后, 将下载好的”geckodriver”文件放在你的计算机的 “/usr/bin” 或 “/usr/local/bin” 目录。并赋予执行权限,如下所示:
    sudo cp geckodriver /usr/local/bin
    sudo chmod +x /usr/local/bin/geckodriver
    

    windows用户应该是把geckodriver文件放在环境变量中(PATH),详见百度经验
    或者在代码中引用文件所在位置,如下:

     from selenium import webdriver
      path="D:\\chromedriver.exe" #替换成geckodriver实际所在目录
      driver=webdriver.Chrome(path)
      driver.get("http://www.yahoo.com")
      driver.close()
      driver.quit()
    

    安装火狐浏览器插件Katalon Recorder

    该组件用于录制用户在浏览器中的操作,并生成python等代码,省去了自己写代码的麻烦。类似按键精灵,可以参考莫烦的视频教程。

    • 工具>附加组件>搜索 Katalon Recorder >安装
    • 在需要录制的页面打开 Katalon Recorder ,点击录制,然后完成你想录制的操作,点击停止录制,导出代码。例如我在百度搜索框中输入“P2P”,然后点击搜索,录制得到的代码如下:
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import Select
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import NoAlertPresentException
    import unittest, time, re
    
    class UntitledTestCase(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.implicitly_wait(30)
            self.base_url = "https://www.katalon.com/"
            self.verificationErrors = []
            self.accept_next_alert = True
        
        def test_untitled_test_case(self):
            driver = self.driver
            driver.get("https://www.baidu.com/")
            driver.find_element_by_id("kw").click()
            driver.find_element_by_id("kw").clear()
            driver.find_element_by_id("kw").send_keys("P2P")
            driver.find_element_by_id("su").click()
        
        def is_element_present(self, how, what):
            try: self.driver.find_element(by=how, value=what)
            except NoSuchElementException as e: return False
            return True
        
        def is_alert_present(self):
            try: self.driver.switch_to_alert()
            except NoAlertPresentException as e: return False
            return True
        
        def close_alert_and_get_its_text(self):
            try:
                alert = self.driver.switch_to_alert()
                alert_text = alert.text
                if self.accept_next_alert:
                    alert.accept()
                else:
                    alert.dismiss()
                return alert_text
            finally: self.accept_next_alert = True
        
        def tearDown(self):
            self.driver.quit()
            self.assertEqual([], self.verificationErrors)
    
    if __name__ == "__main__":
        unittest.main()
    
    

    其中,以下内容是与我们的操作相关的代码

    def test_untitled_test_case(self):
            driver = self.driver
            driver.get("https://www.baidu.com/")              #打开百度搜索页面
            driver.find_element_by_id("kw").click()          #点击搜索输入框,这个在写代码时可以不要
            driver.find_element_by_id("kw").clear()         #清空里面已有的输入
            driver.find_element_by_id("kw").send_keys("P2P")    #在里面输入P2P搜索词
            driver.find_element_by_id("su").click()          #点击搜索按钮
    

    后台运行

    • 安装PhantomJs,见参考链接
    • driver = webdriver.PhantomJS()

    简单教程

    • 连接浏览器,以火狐Firefox浏览器为例
    from selenium import webdriver
    self.driver = webdriver.Firefox()
    
    • 打开某个页面
    driver.get("https://www.baidu.com/")
    
    • 等待具有某个ID的元素加载完成,这用来保证页面以及加载出来
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
    from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw"))) #这是百度输入框的ID
    

    获取输入框ID可以使用Firefox或Chrome浏览器的提供的调试工具,对于Firefox浏览器,在页面右键选择“查看元素”即可打开调试页面,点击调试页面左上角的“选择一个元素”按钮,再点击百度的输入框,可以在下方看到它的ID为“kw”

    • 使用前面我们录制得到的代码实现自动输入搜索词
    driver.find_element_by_id("kw").clear()         #清空里面已有的输入
    driver.find_element_by_id("kw").send_keys("P2P")    #在里面输入P2P搜索词
    driver.find_element_by_id("su").click()          #点击搜索按钮
    
    • 通过“审查元素”分析,我们发现百度搜索得到的每个词条的class属性都为result c-container,通过这个,我们可以得到所有搜索结果
    e_item = driver.find_elements_by_xpath('//div[@class="result c-container "]')
    print('\n'.join([e.find_element_by_tag_name('a').text for e in e_item])) #打印每个条目的内容
    

    结果如下:

    【网贷之家】中国首家权威p2p网贷投资理财行业门户_网贷理财_p2p…
    P2P平台被清盘后,你会怎样捍卫自身利益?
    P2P金融_百度百科
    P2psearcher绿色版下载_P2psearcher免安装版官方下载-华军软件园
    国家出手,P2P现回暖迹象!
    迪蒙–供应链金融、黄金理财、融资租赁、消费金融系统专业开发商

    同样,我们也可以获得每个条目的链接,进入链接即可抓取我们想要的数据

    print('\n'.join([e.find_element_by_tag_name('a').get_attribute('href') for e in e_item]))
    

    结果如下:

    http://www.baidu.com/link?url=80_XPZ-NHHGGwNmIpG5kNuAn0b8MKU5rHrdy-dJXwvy
    http://www.baidu.com/link?url=Vik9gXKc-hz-tGHQ1JcsRVzCn7vXRMr_HXNuuYa_sc_4o_Epq6Z7v7rZeW070Orxr3rWtAnAz44FR9vZSDtzcykS7WzmdI_JGfml2jERU
    http://www.baidu.com/link?url=sq7r9PEl1YjbGpDFNQKauiE21G7wKHYK9PpL1gRG6j6OPEpPrDXmTVbaO0ExdCoevQVaZzjqbvm0Pe_c1p_DHigIukY5n_-yr784N6ulcQC
    http://www.baidu.com/link?url=tXD8qkEJClA6bqXKjIq0Zg9gICFvKaC6QgCpE1FGn1xnXXd_8UAfGrNRLvH1cX-PMdkJ15mhnMUJzld1R_-vc_
    http://www.baidu.com/link?url=Jd1r4dPGnyYHxC9VuhtzWQFV3-Je4WzLC0UZJqdMJQT1ExBYOuBDI5mpRKDIT5lV564GTSe1Xw_3ZRqxjVI6UDU0SKh-spSslgiLGgsie0C
    http://www.baidu.com/link?url=ONtuKqNGH5M2PCqcEJ9AuQMLfWpoq8KTVMmY9mKLjya

    • 抓完一页的结果之后,再翻到下一页
    driver.find_element_by_xpath(u"//div[@id='page']/descendant::span[text()='2']").click() #其中2为页码,可以依次换成其他页码
    
    • 完整代码如下:
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
    from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw")))
    driver.find_element_by_id("kw").clear()         #清空里面已有的输入
    driver.find_element_by_id("kw").send_keys("P2P")    #在里面输入P2P搜索词
    driver.find_element_by_id("su").click()          #点击搜索按钮
    
    for i in range(2,5,1):
        time.sleep(1)
        e_item = driver.find_elements_by_xpath('//div[@class="result c-container "]')
        print('\n'.join([e.find_element_by_tag_name('a').text for e in e_item]))
        driver.find_element_by_xpath(f"//div[@id='page']/descendant::span[text()='{i}']").click()
            
    driver.quit()
    

    结果如下:

    【网贷之家】中国首家权威p2p网贷投资理财行业门户_网贷理财_p2p…
    P2P金融_百度百科
    P2psearcher绿色版下载_P2psearcher免安装版官方下载-华军软件园
    P2P | 异次元软件世界
    迪蒙–供应链金融、黄金理财、融资租赁、消费金融系统专业开发商
    P2P“大崩盘”:上百家平台爆雷 众多投资人卷入其中|P2P…_新浪科技
    一周40家P2P“爆雷”,一旦踩雷就血本无归? | 小巴问大…_搜狐财经
    p2p有哪些公司_网贷天眼
    P2P“大崩盘”:上百家平台爆雷 众多投资人卷入其中|P2P…_新浪科技
    世上再无P2P-虎嗅网
    网贷天眼-你的互联网金融理财助手_P2P网贷理财
    互联网p2p理财网贷平台_P2P投资理财专家_现金万家P2P投资理财网
    半个月超40家平台"爆雷" P2P行业发生了什么事_网易科技
    【你我贷官网】平稳运营7年有余的P2P网络借贷信息中介平台,网上…
    一天17个P2P平台出问题?起码一半存在
    p2p什么时候进入中国的_网贷天眼
    红岭创投_值得信赖的P2P网贷平台_P2P个人理财平台
    红岭创投_值得信赖的P2P网贷平台_P2P个人理财平台
    对等网络_百度百科
    P2P 是什么? - 知乎
    频频爆雷背后暴露三大原因 P2P网贷行业该走向何方?互联网金融
    P2P理财_P2P理财排名_P2P网贷平台 - 融360
    P2P网贷|P2P理财|P2P贷款 - 专业的P2P网贷产品导购平台_希…_希财
    富金利_P2P平台_专业安全的P2P网贷投融资平台【唯一官网】
    P2P - 金评媒
    p2p吧-百度贴吧
    P2P | 人人都是产品经理

    抓取网易房地产数据例子

    # -*- coding: utf-8 -*-
    import os
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import Select
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import NoAlertPresentException
    from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
    from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
    from selenium.webdriver.support import expected_conditions
    import unittest, time, re
    import pandas as pd
    
    class MyCrawler(object):
        def __init__(self):
            self.path = "/home/liucc/Workspace/Housing/data"
            
            if not os.path.exists(self.path):
                os.mkdir(self.path)
                
            self.driver = webdriver.Firefox()
            self.base_url = "http://data.house.163.com/bj/housing/trend/district/todayprice/{date:s}/{interval:s}/allDistrict/1.html?districtname={disname:s}#stoppoint"
            self.data = None 
        
        def craw_page(self,date="2014.01.01-2018.09.15",interval="month",disname="全市"):
            driver = self.driver
            url = self.base_url.format(date=date,interval=interval,disname=disname)
            print('访问网址:'+url)
            driver.get(url)
            
            try:
                # we have to wait for the page to refresh, the last thing that seems to be updated is the title
                WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "resultdiv_1")))
    
                print(driver.title)
                
                self.data = pd.DataFrame()
                
                ct = True
                while ct:
                    self.get_items_in_page(driver)
                    
                    e_pages = driver.find_elements_by_xpath('//div[@class="pager_box"]/a[@class="pager_b current"]/following::a[@class="pager_b "]')
    
                    if len(e_pages)>0:
                        next_page_num = e_pages[0].text
                        e_pages[0].click()
                        
                        #通过判断当前页是否为我们点击页面的方式来等待页面加载完成
                        WebDriverWait(driver, 10).until(
                            expected_conditions.text_to_be_present_in_element(
                                (By.XPATH, '//a[@class="pager_b current"]'),
                                next_page_num
                            )
                        )
     
                    else:
                        ct = False
                        break
                
                return self.data
                
            finally:
                driver.quit()
                
               
            
        def get_items_in_page(self,driver):
            e_tr = driver.find_elements_by_xpath("//tr[normalize-space(@class)='mBg1' or normalize-space(@class)='mBg2']")
            temp = pd.DataFrame(e_tr,columns=['web'])
            temp['时间']=temp.web.apply(lambda x:x.find_element_by_class_name('wd2').text.split(' ')[0])
            temp['套数']=temp.web.apply(lambda x:x.find_element_by_class_name('wd5').text)
            temp['均价']=temp.web.apply(lambda x:x.find_element_by_class_name('wd7').text)
            temp['去化']=temp.web.apply(lambda x:x.find_element_by_class_name('wd14').text)
            del temp['web']
            
            self.data = pd.concat([temp,self.data],axis=0)
      
    
    
    mcraw = MyCrawler()
    data = mcraw.craw_page()
    
    访问网址:http://data.house.163.com/bj/housing/trend/district/todayprice/2014.01.01-2018.09.15/month/allDistrict/1.html?districtname=全市#stoppoint
    北京全市-住宅-成交均价住宅成交数据_北京房价_网易北京房产
    
    data= data.sort_values(by='时间')
    print(data.to_string(index=False))
    
    时间    套数      均价     去化
    2014-01  4040  28,012  40.8%
    2014-02  1302  26,990  40.5%
    2014-03  4939  28,330  40.3%
    2014-04  3388  26,372  39.4%
    2014-05  3499  26,592  38.8%
    2014-06  2780  28,627  59.8%
    2014-07  3969  25,539  59.7%
    2014-08  5221  24,814  59.6%
    2014-09  3563  26,199  59.5%
    2014-10  6554  23,045  59.7%
    2014-11  8133  24,122  60.0%
    2014-12  9337  25,287  59.8%
    2015-01  7614  28,280  60.2%
    2015-02  2750  23,755  60.3%
    2015-03  2895  26,832  60.4%
    2015-04  5341  25,460  60.5%
    2015-05  5347  27,486  60.8%
    2015-06  5634  30,185  60.9%
    2015-07  9915  27,662  61.0%
    2015-08  7475  28,371  61.4%
    2015-09  5698  29,887  61.6%
    2015-10  6205  26,145  61.8%
    2015-11  4944  32,372  61.9%
    2015-12  9451  29,368  62.3%
    2016-01  4030  31,019  62.5%
    2016-02  1886  33,160  62.6%
    2016-03  4209  37,005  62.9%
    2016-04  5245  36,337  63.2%
    2016-05  4565  37,107  63.4%
    2016-06  4400  37,236  63.4%
    2016-07  6559  34,711  63.5%
    2016-08  6895  32,322  63.6%
    2016-09  4865  40,565  63.8%
    2016-10  3747  40,285  64.3%
    2016-11  2092  44,213  64.4%
    2016-12  4210  41,741  64.5%
    2017-01  2432  41,857  64.6%
    2017-02  2308  42,876  64.6%
    2017-03  2491  42,795  64.7%
    2017-04  2471  45,886  64.8%
    2017-05  2666  44,751  64.9%
    2017-06  1812  48,792  64.9%
    2017-07  1895  51,526  64.9%
    2017-08  1577  47,958  64.9%
    2017-09  1270  56,663  64.9%
    2017-10  1340  55,968  64.8%
    2017-11  2625  46,608  64.8%
    2017-12  2748  53,320  64.8%
    2018-01  1615  42,206  64.7%
    2018-02  1138  42,280  64.7%
    2018-03  1243  42,498  64.6%
    2018-04  1408  46,897  64.6%
    2018-05  3560  43,199  64.8%
    2018-06  1884  43,391  64.9%
    2018-07  2090  47,960  64.9%
    2018-08  4181  41,096  65.0%
    2018-09  2369  31,965  65.1%
    
    data.to_csv('./data/housing_beijing.csv',index=False)
    
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    # 指定默认字体
    plt.rcParams['font.sans-serif']=['SimHei'] 
    plt.rcParams['font.family']='sans-serif' 
    # 用来正常显示负号
    plt.rcParams['axes.unicode_minus']=False
    
    data = pd.read_csv('./data/housing_beijing.csv')
    y = [float(s.replace(',','')) for s in data['均价'].values]
    plt.plot(y,color='red', marker='o', linestyle='solid')
    plt.xlabel(u'日期')
    plt.ylabel(u'均价(元)')
    plt.title(u'北京房价走势')
    plt.show()
    

    房价走势图

    matplotlib中文乱码的解决详见参考链接


    参考链接

    展开全文
  • selenium爬虫图片

    2020-10-26 15:09:07
    selenium爬虫图片前言1. 环境配置1.1 Anaconda安装1.2 selenium安装1.3 google浏览器1.4 chromedriver配置2. 爬图片代码总结 前言 在做目标检测或语义分割时,有时没有找到自己需要的数据集,那么爬虫是一个很有效的...
  • python的《Selenium爬虫》中文版
  • 主要给大家介绍了关于如何利用selenium爬虫抓取数据的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用selenium具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 主要介绍了Python selenium爬虫实现定时任务过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了python3通过selenium爬虫获取到dj商品的实例代码,需要的朋友可以参考下
  • 利用selenium爬虫模拟浏览器(Chrome、Firefox)访问CSDN博客
  • Python + Selenium 爬虫小记。
  • python利利用用selenium进进行行浏浏览览器器爬爬虫虫 这篇文章主要介绍了python项目实战之利用selenium进行浏览器爬虫,本文给大家介绍的非常详细具有一定的参 考借鉴价值需要的 友可以参考下 前前言言 相信大家刚...
  • 1.selenium基本命令 加载网页 from selenium import webdriver driver = webdriver.PhantomJS(“c:…/pantomjs.exe”) driver.get("http://www.baidu.com/") driver.save_screenshot("长城.png") # 保存截屏...
  • 点击上方蓝色小字,关注“涛哥聊Python”重磅干货,第一时间送达作者 |kingname来源 |未闻Code在昨天的公众号文章《别去送死了,Selenium 爬虫暴露了几十个特征!...
  • Selenium爬虫相关——js语句和handles句柄
  • python selenium爬虫: chromedriver运行卡顿 chrome运行一段时间后崩溃,电脑卡顿 python爬虫用selenium+chrome来获取网页cookie,本来运行好好的,结果第二天发现电脑严重卡顿,爬虫程序假死。在打开任务管理器后...
  • selenium爬虫:一行代码去掉所有webdriver痕迹

    千次阅读 多人点赞 2021-05-14 16:40:18
    1、前言 ...以及selenium爬虫使用代理情况下不设置这几个参数,代理就白加了,正确的关闭webrtc以及设置成代理的时区和地理位置,可以很好的帮我们的浏览器伪装成正儿八经的正常浏览器,犹如滤镜可
  • 基于Selenium爬虫的自动每天点绿github主页的python脚本
  • 这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了。 源码展示 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common...
  • Selenium爬虫-获取浏览器Network请求和响应
  • request+selenium爬虫 项目周期 项目介绍 爬了XXXXX,XXX,XXX,等网站,获取网站上的XXX,XXX,XXX,数据,每个月定时抓取XXX数据,使用该数据实现了XXX,XXX,XX, 开发环境 linux+pycharm+requests+mongodb+...
  • selenium爬虫是一种比较实用的爬虫手段,对于量比较小的数据,selenium相对于其他爬虫方法更加简单、实用。 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains ...
  • selenium爬虫被检测到 该如何破?

    千次阅读 2019-08-18 22:43:11
    selenium爬虫被检测到 该如何破? 如何获取cookies? 使用的方法是通过 mitmproxy 蔽掉识别 webdriver 标识符的 js 文件。 首先下载mitproxy,pip安装方法: pip install mitmproxy基本使用方法:给本机设置代理ip ...
  • scrapy+selenium爬虫

    2019-06-05 11:46:31
    scrapy爬虫记录使用scrapy爬虫scrapy+selenium模拟登陆动态页面 使用scrapy爬虫 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下...
  • java selenium爬虫 代码

    2018-03-21 16:16:31
    java 代码 自动爬取饿了么网站数据。爬取月单数等、 java 代码 自动爬取饿了么网站数据。爬取月单数等、 java 代码 自动爬取饿了么网站数据。爬取月单数等、 java 代码 自动爬取饿了么网站数据。...
  • 说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 ...所以需要使用 selenium 模拟真实浏览器进行操作。 最终实现效果如下: 前提是需要自行搜索教程安装: chromeDriver selen

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,733
精华内容 13,893
关键字:

selenium爬虫

爬虫 订阅