python使用Selenium下载文件

时间:2016-03-11 15:59:53

标签: python selenium

伙计我需要编写一个脚本,使用selenium浏览网站上的页面并将每个页面下载到一个文件中。 这是我需要经历的网站,我想下载所有10页的评论。 这是我的代码:

import urllib2,os,sys,time
from selenium import webdriver

browser=urllib2.build_opener()
browser.addheaders=[('User-agent', 'Mozilla/5.0')]



url='http://www.imdb.com/title/tt2948356/reviews?ref_=tt_urv'

driver = webdriver.Chrome('chromedriver.exe')
driver.get(url)

time.sleep(2)


if not os.path.exists('reviewPages'):os.mkdir('reviewPages')

response=browser.open(url)
myHTML=response.read()
fwriter=open('reviewPages/'+str(1)+'.html','w')
fwriter.write(myHTML)
fwriter.close()
print 'page 1 done'

page=2

while True:
    cssPath='#tn15content > table:nth-child(4) > tbody > tr > td:nth-child(2) > a:nth-child(11) > img'
    try:
        button=driver.find_element_by_css_selector(cssPath)
    except:
        error_type, error_obj, error_info = sys.exc_info()
        print 'STOPPING - COULD NOT FIND THE LINK TO PAGE: ', page
        print error_type, 'Line:', error_info.tb_lineno
        break

    button.click()
    time.sleep(2)

    response=browser.open(url)
    myHTML=response.read()
    fwriter=open('reviewPages/'+str(page)+'.html','w')
    fwriter.write(myHTML)
    fwriter.close()
    time.sleep(2)
    print 'page',page,'done'
    page+=1

但该程序只是停止下载第一页。有人可以帮忙吗?感谢。

2 个答案:

答案 0 :(得分:0)

所以有一些事情导致了这一点。

我认为你的第一个问题是:

table:nth-child(4)

当我访问该网站时,我认为您只是想要:

table >

第二个错误是您的except消息中的break语句。这说,当我收到错误时,停止循环。

所以正在发生的事情是你的尝试,除了因为你的CSS选择器不太正确而无法正常工作,并且在你告诉它停止循环的情况下转到你的异常。

答案 1 :(得分:0)

而不是那个非常复杂的CSS路径尝试这个更简单的xpath(' // [child :: img [@alt =" [Next]"]] / @ href' )它将返回与小三角形' next'相关联的URL。每页上的按钮。

请注意,每个页面都有10条评论,而第2页到第10页的网址只是提供了开始评论编号,即http://www.imdb.com/title/tt2948356/reviews?start=10这是第2页的网址。只需计算下一页的URL,当它没有提取任何内容时停止。