я пытался использовать селен, чтобы очистить названия статей на этом сайте: http://www.ncbi.nlm.nih.gov/pubmed?term=(%222013%22%5BDate%20-%20Publication%5D%20%3A%20%222013%22%5BDate%20-%20Publication%5D)получить питон UnicodeEncodeError, когда я использовал селен ползать веб-сайт
#coding="utf-8"
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
domain = "http://www.ncbi.nlm.nih.gov/"
url_tail = "pubmed?term=(%222013%22%5BDate%20-%20Publication%5D%20%3A%20%222013%22%5BDate%20-%20Publication%5D)"
url = domain + url_tail
browser = webdriver.Firefox()
browser.get(url)
time.sleep(5)
def extract_data(browser):
titles = browser.find_elements_by_css_selector("div.rprt div.rslt p.title a")
return [title.text for title in titles]
page_start = 1
page_end = 10
f = open('titles.txt', 'a')
for page in range(page_start, page_end):
print "page %d" % page
page_jump_box = browser.find_element_by_class_name("num").clear()
page_jump_box_cleared = browser.find_element_by_class_name("num")
page_jump_box_cleared.send_keys(str(page) + Keys.RETURN)
time.sleep(15)
f = open('titles.txt', 'a')
for line in extract_data(browser):
f.write(line + '\n')
f.close()
, когда я запускаю его, я получил это:
Когда я искал в Stackoverflow, я нашел аналогичный вопрос: UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128). Я узнал, что когда вы используете str(), это вызовет проблему unicode. Но в моем коде я использую только str(), чтобы сделать число page
строкой. Итак, как исправить код.
А вот еще один question.I've узнал, что если я хочу использовать phantomjs с селеном, мне нужно только изменить browser = webdriver.Firefox()
в browser = webdriver.PhantomJS()
, но когда я это сделать, содержание, что я соскобленные повторяются (только титулы страницы 1 были очищены).
Я не являюсь носителем английского языка, если есть какая-либо ошибка в грамматике или какая-либо ошибка, пожалуйста, дайте мне знать.
благодарит заранее.
Thanks.It works.But, когда я изменяю 'browser = webdriver.Firefox()' в 'browser = webdriver.PhantomJS()', он все еще царапает повторяющееся содержимое. Вы знаете, почему? –
@TongfeiGao Хорошо, хорошо, это отдельная проблема, позвольте мне взглянуть. – alecxe
@TongfeiGao см. Обновление (работает для меня). – alecxe