最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python怎么爬动态网站

    正文概述    2020-10-10   377

    python怎么爬动态网站

    python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的“查看网页源代码”一样。一些动态的东西如javascript脚本执行后所产生的信息,是抓取不到的,这里暂且先给出这么一 些方案,可用于python爬取js执行后输出的信息。

    1、两种基本的解决方案

    1.1 用dryscrape库动态抓取页面

    js脚本是通过浏览器来执行并返回信息的,所以,抓取js执行后的页面,一个最直接的方式就是用python模拟浏览器的行为。WebKit 是一个开源的浏览器引擎,python提供了许多库可以调用这个引擎,dryscrape便是其中之一,它调用webkit引擎来处理包含js等的网页!

    import dryscrape
    # 使用dryscrape库 动态抓取页面
    def get_url_dynamic(url):
        session_req=dryscrape.Session()
        session_req.visit(url) #请求页面
        response=session_req.body() #网页的文本
        #print(response)
        return response
    get_text_line(get_url_dynamic(url)) #将输出一条文本

    这里对于其余包含js的网页也是适用的!虽然可以满足抓取动态页面的要求,但缺点还是很明显的:慢!太慢了,其实想一想也合理,python调用 webkit请求页面,而且等页面加载完,载入js文件,让js执行,将执行后的页面返回,慢一点也是应该的!除外还有很多库可以调用 webkit:PythonWebkit,PyWebKitGit,Pygt(可以用它写个浏览器),pyjamas等等,听说它们也可以实现相同的功能!

    1.2 selenium web测试框架

    selenium是一个web测试框架,它允许调用本地的浏览器引擎发送网页请求,所以,它同样可以实现抓取页面的要求。

    # 使用 selenium webdriver 可行,但会实时打开浏览器窗口

    def get_url_dynamic2(url):
        driver=webdriver.Firefox() #调用本地的火狐浏览器,Chrom 甚至 Ie 也可以的
        driver.get(url) #请求页面,会打开一个浏览器窗口
        html_text=driver.page_source
        driver.quit()
        #print html_text
        return html_text
    get_text_line(get_url_dynamic2(url)) #将输出一条文本

    这也不失为一条临时的解决方案!与selenium类似的框架还有一个windmill,感觉稍复杂一些,就不再赘述!

    2、selenium的安装与使用

    2.1 selenium的安装

    在Ubuntu上安装可以直接使用pip install selenium。由于以下原因:

    1. selenium 3.x开始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver";而2.x是executable_path="wires"

    2. firefox 47以上版本,需要下载第三方driver,即geckodriver

    还需要一些特殊操作:

    1. 下载 geckodriverckod 地址: 

    mozilla/geckodriver

    2. 解压后将geckodriverckod 存放至 /usr/local/bin/ 路径下即可:

    sudo mv ~/Downloads/geckodriver /usr/local/bin/

    2.2 selenium的使用

    1. 运行报错:

    driver = webdriver.chrome()
    TypeError: 'module' object is not callable

    解决方案:浏览器的名称需要大写Chrome和Firefox,Ie

    2. 通过

    content = driver.find_element_by_class_name('content')

    来定位元素时,该方法返回的是FirefoxWebElement,想要获取包含的值时,可以通过

    value = content.text

    python学习网,免费的在线学习python平台,欢迎关注!


    起源地下载网 » python怎么爬动态网站

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元