美文网首页
「爬虫」19利用PhantomJS编写爬虫程序

「爬虫」19利用PhantomJS编写爬虫程序

作者: 林拂晓 | 来源:发表于2020-02-11 21:55 被阅读0次

    虽然PhantomJS的开发者已经停止更新了,但现存版本依旧可以使用,仍然可以用来解决爬虫中遇到的某些问题,所以还是很值得了解学习一下的。

    (1)下载https://phantomjs.org/download.html

    官网windows版本下载

    (2)安装

    ①解压压缩包到指定目录;

    ②将~/phantomjs/bin添加到主机环境变量中,在cmd中输入>>>phantomjs,进入phantomjs shell即为配置成功;

    cmd模式进入PhantomJs

    ③要在python IDLE中使用phantomjs,还必须安装selenium模块。

    (3)基本爬虫使用方法

    前提:from selenium import webdriver

    ①打开

    >>>browser=webdriver.PhantomJS()

    ②浏览网页

    >>>url="http://www.baidu.com"

    >>>browser.get(url)

    ③直接把爬取的网页截图

    >>>browser.get_screenshot_as_file("G:/DA/file/pjs1.png")

    ④直接获取页面源代码

    page_code=browser.page_source

    ⑤正则表达式提取网页title

    Import re

    pat_title="<title>(.*?)</title>"

    title1=re.compile(pat_title).findall(page_code)

    print(title1)

    ⑥xpath表达式提取网页title(必须先将page_code转为tree,再进行xpath提取)

    from lxml import etree

    edata=etree.HTML(page_code)

    title2=edata.xpath("/html/head/title/text()")

    print(title2)

    ⑦关闭浏览器

    >>>browser.quit()

    (4)实现自动登录豆瓣

    豆瓣登录窗口

    ①短信登录

    PhantomJS实现短信验证登录

    ②账号密码登录

    PhantomJS实现账号密码验证登录

    【注】WebDriver8种基本元素定位方法:

    ①find_element_by_id():根据id属性进行定位;

    例如:find_element_by_id(“one”)定位id为one的元素。

    ②find_element_by_name():根据name属性进行定位;

    例如:find_element_by_name(“one”):定位name属性为one的元素。

    ③find_element_by_class_name():根据class的名字进行定位;

    例如:find_element_by_class_name(“one”)定位class为one的元素。

    ④find_element_by_xpath():xpath是XML路径语言,通过确定xml文档中的元素位置来完成对元素的定位;

    例如:find_element_by_xpath("//div[@id=‘one']")定位id为one的div元素;find_element_by_xpath("//*[@class=‘two']")定位class为two的元素。

    ⑤find_element_by_css_selector():根据css属性进行定位;

    例如:find_element_by_css_selector("#one")定位id为one的div元素;find_element_by_css_selector(".two")定位class为two的元素。

    ⑥find_element_by_tag_name ():根据标签名进行定位;

    例如:find_element_by_tag_name(“input”)定位input元素。

    ⑦find_element_by_link_text():根据完整a链接文字进行定位find_element_by_partial_link_text() 根据部分a链接文字进行定位;

    例如:find_element_by_link_text(“新闻”) 定位文字为‘新闻'的a元素;find_element_by_partial_link_text(“闻”) 定位文字包括‘闻'的a元素。

    ⑧By定位( 需要导入By类:from selenium.webdriver.common.by import By );

    例如:find_element(By.ID,“one”)定位id为one的元素;find_element(By.NAME,“one”)定位name属性为one的元素;find_element(By.CLASS_NAME,“one”)定位class为one的元素;find_element(By.TAG_NAME,“div”)定位div元素。

    Ps:当定位元素为多个时,使用elements复数定位,即把定位方法中的element换成elements,此时获取到的为相同属性的一组元素,返回一个list队列,然后可以再去定位单个元素;

    例如:find_elements_by_class_name(“one”)[1],定位class为one的所有元素中第二个元素。

    相关文章

      网友评论

          本文标题:「爬虫」19利用PhantomJS编写爬虫程序

          本文链接:https://www.haomeiwen.com/subject/tqyffhtx.html