V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
py123456
V2EX  ›  Python

还是 python 好玩

  •  
  •   py123456 · 2016-11-06 13:37:07 +08:00 · 3514 次点击
    这是一个创建于 2942 天前的主题,其中的信息可能已经有所发展或是发生改变。

    import urllib, base64 from bs4 import BeautifulSoup

    def fetch(k):

         url = base64.decodestring("aHR0cDovL3NlYXJjaC5qZC5jb20vU2VhcmNoP2tleXdvcmQ9JXMmZW5jPXV0Zi04JndxPSVz") % ((urllib.quote(k),)*2)
    
         ret = map(lambda l:[l.attrs.get('data-sku') or '']+map(lambda x: x.text.strip() if x else '',[l.select_one(css) for css in ['div.p-price i', 'div.p-name a']])+(lambda x: [x.attrs.get('src') or x.attrs.get('data-lazy-img')] if x else [''])(l.select_one('div.p-img a img')), BeautifulSoup
    

    (urllib.urlopen(url), 'html.parser', from_encoding='utf-8').select("#J_goodsList ul li"))

         return filter(lambda r: True if '' not in r else False, ret)
    

    if name == "main":

    for l in fetch('iphone'):
        print l
    
    11 条回复    2016-11-07 18:39:03 +08:00
    Kilerd
        1
    Kilerd  
       2016-11-06 13:42:52 +08:00
    base64.decodestring("aHR0cDovL3NlYXJjaC5qZC5jb20vU2VhcmNoP2tleXdvcmQ9JXMmZW5jPXV0Zi04JndxPSVz")

    不懂你为什么要先 encode 再 decode 。隐藏什么东西???
    Kilerd
        2
    Kilerd  
       2016-11-06 13:43:15 +08:00
    aHR0cDovL3NlYXJjaC5qZC5jb20vU2VhcmNoP2tleXdvcmQ9JXMmZW5jPXV0Zi04JndxPSVz
    http://search.jd.com/Search?keyword=%s&enc=utf-8&wq=%s
    purebluesong
        3
    purebluesong  
       2016-11-06 13:46:09 +08:00
    握草, 新式广告?
    veelog
        4
    veelog  
       2016-11-06 14:00:12 +08:00 via Android
    乱了,复制下来运行了下,是爬 jd 商品价格的爬虫
    est
        5
    est  
       2016-11-06 14:07:37 +08:00
    现在爬价格还不够啊。还得把各种券的组合算出来。。。累。
    msg7086
        6
    msg7086  
       2016-11-06 15:31:07 +08:00
    玩 one-liner 为什么不去玩 ruby ……
    yuankui
        7
    yuankui  
       2016-11-06 20:44:39 +08:00
    楼主你要牛逼啊,居然能写出这么难看的代码!佩服
    aihimmel
        8
    aihimmel  
       2016-11-06 21:39:51 +08:00 via Android
    过于炫技了吧, lambda 满天飞
    aihimmel
        9
    aihimmel  
       2016-11-06 21:42:01 +08:00 via Android
    PEP8 标准是一行少于 79 字符,不如拆开写。
    jackyspy
        10
    jackyspy  
       2016-11-07 10:19:01 +08:00
    就算炫技,也要写的别人能看清楚,对不?

    ```
    def fetch(k):
    url = 'http://search.jd.com/Search?keyword={k}&enc=utf-8&wq={k}'.format(
    k=urllib.quote(k))

    return filter(all, (
    [l.attrs.get('data-sku')] +
    [x and x.text.strip() for x in map(l.select_one, [
    'div.p-price i', 'div.p-name a'])] +
    (lambda x: [x and (x.attrs.get('src') or x.attrs.get('data-lazy-img'))])(
    l.select_one('div.p-img a img'))
    for l in BeautifulSoup(urllib.urlopen(url), 'html.parser',
    from_encoding='utf-8'
    ).select("#J_goodsList ul li")
    ))
    ```
    justyy
        11
    justyy  
       2016-11-07 18:39:03 +08:00
    程序要让你看得懂,看不懂 的程序 任何语言都可以写出来。
    PYTHON 的优点是写出来的程序 简洁清楚,而不是这样玩。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:04 · PVG 08:04 · LAX 16:04 · JFK 19:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.