zoukankan      html  css  js  c++  java
  • 用python的curl和lxml来抓取和分析网页内容

        Curl是一个强大的URL语法的客户端,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS等多种协议。

        Lxml是python一个非常好用的xml模块,同时支持html的处理。虽然html是xml的一个子集,但是有些html网页写的不够标准,例如写了<option>但是又没写</option>,这种情况下使用xml工具来分析绝对是会报错的,但是html工具通常就可以很好的兼容这些非标准的情况。

        用urlparse的urljoin可以很好的帮你处理相对路径问题。

        如果你的python里面缺少了curl或者lxml等模块,可以到pypi去找。

    #!/usr/bin/env python
    # coding: utf-8
    
    import os
    import sys
    import urlparse
    
    import lxml.html
    import lxml.etree
    import curl
    
    def download(url):
        c = curl.Curl()
        c.set_timeout(8)
        c.get(url)
        return c.body()
    
    def parse_url():
        base_url = 'http://finance.ce.cn/stock/'
        ht_string = download(base_url)
        ht_doc = lxml.html.fromstring(ht_string, base_url)
        elms = ht_doc.xpath("//li[@style='font-size:15px; line-height:29px;']/a")
        for i in elms:
            print urlparse.urljoin(base_url, i.get('href'))
            print lxml.etree.tostring(i, encoding='utf-8')
    
    if __name__ == '__main__':
        parse_url()
  • 相关阅读:
    bzoj1202 狡猾的商人
    bzoj1059 矩阵游戏
    bzoj1003 物流运输
    bzoj1601 灌水
    2017-10-25模拟赛
    洛谷—— P1051 谁拿了最多奖学金
    BZOJ——1611: [Usaco2008 Feb]Meteor Shower流星雨
    2017-10-23学大伟业Day1
    BZOJ——1610: [Usaco2008 Feb]Line连线游戏
    Vijos 包裹快递(二分)
  • 原文地址:https://www.cnblogs.com/firemeteorx/p/3328677.html
Copyright © 2011-2022 走看看