有人能帮我吗?我写了一个代码,用Selenium从一个中国新闻网站上抓取文章。由于许多url都没有加载,我试图包含捕捉超时异常的代码,这很有效,但浏览器似乎停留在加载时超时的页面上,而不是移动到下一个url。
在处理完错误后,我尝试添加driver.quit((和driver.close((,但在继续下一个循环时,它不起作用。
with open('url_list_XB.txt', 'r') as f:
url_list = f.readlines()
for idx, url in enumerate(url_list):
status = str(idx)+" "+str(url)
print(status)
try:
driver.get(url)
try:
tblnks = driver.find_elements_by_class_name("post_topshare_wrap")
for a in tblnks:
html = a.get_attribute('innerHTML')
try:
link = re.findall('href="http://comment(.+?)" title', str(html))[0]
tb_link = 'http://comment' + link
print(tb_link)
ID = tb_link.replace("http://comment.tie.163.com/","").replace(".html","")
print(ID)
with open('tb_links.txt', 'a') as p:
p.write(tb_link + 'n')
try:
text = str(driver.find_element_by_class_name("post_text").text)
headline = driver.find_element_by_tag_name('h1').text
date = driver.find_elements_by_class_name("post_time_source")
for a in date:
date = str(a.text)
dt = date.split(" 来源")[0]
dt2 = dt.replace(":", "_").replace("-", "_").replace(" ", "_")
count = driver.find_element_by_class_name("post_tie_top").text
with open('SCS_DATA/' + dt2 + '_' + ID + '_INT_' + count + '_WY.txt', 'w') as d:
d.write(headline)
d.write(text + 'n')
path = 'SCS_DATA/' + ID
os.mkdir(path)
except NoSuchElementException as exception:
print("Element not found ")
except IndexError as g:
print("Index Error")
node = [url, tb_link]
results.append(node)
except NoSuchElementException as exception:
print("TB link not found ")
continue
except TimeoutException as ex:
print("Page load time out")
except WebDriverException:
print('WD Exception')
我想让代码在URL列表中移动,调用它们并获取文章文本以及讨论页面的链接。它一直工作到加载时页面超时,然后程序将不会继续。
我不能完全理解您的代码在做什么,因为我没有您正在自动化的页面的上下文,但我可以为您如何完成这样的任务提供一个通用结构。以下是我将如何处理您的场景的简化版本:
# iterate URL list
for url in url_list:
# navigate to a URL
driver.get(url)
# check something here to test if a link is 'broken' or not
try:
driver.find_element(someLocator)
# if link is broken, go back
except TimeoutException:
driver.back()
# continue so we can return to beginning of loop
continue
# if you reach this point, the link is valid, and you can 'do stuff' on the page
此代码导航到URL,并执行一些检查(您指定的(以查看链接是否"断开"。我们通过捕获抛出的TimeoutException
来检查断开的链接。如果抛出异常,我们导航到上一页,然后调用continue
返回到循环的开头,并从下一个URL开始。
如果我们通过try
/except
块,那么URL是有效的,并且我们在正确的页面上。在这个地方,你可以写你的代码来抓取文章或任何你需要做的事情
只有在未遇到TimeoutException
的情况下,才会命中出现在try
/except
之后的代码,这意味着URL是有效的。