【发布时间】:2015-02-24 16:37:08
【问题描述】:
我正在尝试使用 selenium 来抓取该网站上的论文标题:http://www.ncbi.nlm.nih.gov/pubmed?term=(%222013%22%5BDate%20-%20Publication%5D%20%3A%20%222013%22%5BDate%20-%20Publication%5D)
#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()
当我运行它时,我得到了这个:
gao@gao:~/crawler$ python crawler3.0.py
page 1
page 2
page 3
page 4
Traceback (most recent call last):
File "crawler3.0.py", line 33, in <module>
f.write(line + '\n')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 36: ordinal not in range(128)
当我在 Stackoverflow 上搜索时,我发现了一个类似的问题:UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)。
我了解到,当您使用 str() 时,会导致 unicode 问题。但在我的代码中,我只使用 str() 将 page 数字变为字符串。所以,如何更正代码。
这是另一个问题。我了解到,如果我想将 phantomjs 与 selenium 一起使用,我只需要将 browser = webdriver.Firefox() 更改为 browser = webdriver.PhantomJS(),但是当我这样做时,我抓取的内容会重复(只刮掉了第 1 页的标题)。
我不是以英语为母语的人,如果有任何语法错误或任何错误,请告诉我。
提前致谢。
【问题讨论】:
标签: python selenium selenium-webdriver phantomjs