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
saximi
V2EX  ›  Python

请教关于用 selenium 解析网页的问题

  •  
  •   saximi · 2017-09-28 20:20:46 +08:00 · 3383 次点击
    这是一个创建于 2647 天前的主题,其中的信息可能已经有所发展或是发生改变。
    from selenium import webdriver 
    from selenium.webdriver.remote.webelement import WebElement   
    
    h=''' 
    <div class="page"><small>下一页</small></div>
    '''  
    
    driver =webdriver.Chrome() 
    driver.get(h)  
    
    #操作 1:读取 h 中的 small 标签,并显示其文本内容,期望的输出是:'下一页'  
    s=driver.find_element_by_xpath("//div[@class='page']//small")    #语句 1 
    print("s=",s.get_attribute('text')) 
    
    #操作 2:定位 h 中文本内容为'下一页'的元素,期望定位到的元素应当是 small 标签。然后显示其文本内容,期望的输出是:'下一页'  
    pg=driver.find_element_by_xpath("//div[@page]//small[contains(text(),'下一页')]")     #语句 2 
    print("pg=",pg.get_attribute('text')) 
    
    
    上面的代码是用 selenium 来解析文本 h, 进行了两个操作,操作的目的如代码中的注释所示,但是两个操作都报错了,提示找不到元素。我的问题如下: 
    1、目前的代码是用 xpath 来解析,请问怎么写才是正确的? 
    2、我尝试不用 xpath,修改如下: 
       语句 1 修改为用 css 选择器   s=driver.find_element_by_css_selector('div.page>small') 
       语句 2 修改为    driver.find_element_by_link_text('下一页') 
       做了上述修改后还是一样找不到元素。恳请大家指点如果不用 xpath,例如用 css 选择器应该怎么写语句呢? 
    
    恳请指点,感谢! 
    
    
    13 条回复    2017-10-01 10:14:02 +08:00
    OpenJerry
        1
    OpenJerry  
       2017-09-28 21:54:15 +08:00
    driver.get(h) 这句话看不懂。driver.get() 这个方法传的参数不应该是一个 URL 吗?
    saximi
        2
    saximi  
    OP
       2017-09-29 00:05:56 +08:00
    @OpenJerry 是我搞错了,我的本意不是要测试某个网址,我只是希望对某一段 HTML 语法的解析进行分析,所以才用文档字符串来保存待分析的内容,我并不想传入整个 URL 作为参数,这样该怎么办呢
    kqz901002
        3
    kqz901002  
       2017-09-29 00:17:33 +08:00
    @saximi python -m SimpleHTTPServer ... driver.get("http://127.0.0.1/test.html")
    cszeus
        4
    cszeus  
       2017-09-29 01:00:51 +08:00
    只想分析 html,用 beautifulsoup 吧
    mlyy
        5
    mlyy  
       2017-09-29 04:15:20 +08:00 via iPhone
    lxml 好像也可以
    justtery
        6
    justtery  
       2017-09-29 08:33:34 +08:00 via Android
    pyquery 在呼唤你
    Marsss
        7
    Marsss  
       2017-09-29 08:42:32 +08:00
    把 target_url 写出来,正确答案马上就有了
    OpenJerry
        8
    OpenJerry  
       2017-09-29 14:16:55 +08:00
    @saximi 同意 4 楼,只是分析 HTML 的话推荐用 BeautifulSoup
    saximi
        9
    saximi  
    OP
       2017-09-29 23:09:42 +08:00
    @kqz901002 请问这是什么包里的模块? 我用 SimpleHTTPServer 关键字在 pypi 上没找到这个包呢,谢谢了
    kqz901002
        10
    kqz901002  
       2017-09-29 23:18:50 +08:00
    @saximi python2 内置
    yucongo
        11
    yucongo  
       2017-09-30 00:16:14 +08:00
    pyquery +1
    saximi
        12
    saximi  
    OP
       2017-09-30 23:34:39 +08:00
    @kqz901002 谢谢,我是 PYTHON3,我试试看有没有
    kqz901002
        13
    kqz901002  
       2017-10-01 10:14:02 +08:00
    @saximi python3 没有
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:55 · PVG 20:55 · LAX 04:55 · JFK 07:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.