伙计我需要编写一个脚本,使用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
但该程序只是停止下载第一页。有人可以帮忙吗?感谢。
答案 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,当它没有提取任何内容时停止。