我有以下示例代码,可以从欧洲议会网站下载给定立法提案的pdf:
编辑:我最终得到了链接,并将其提供给adobes在线转换工具(见下面的代码):
import mechanize
import urllib2
import re
from BeautifulSoup import *
adobe = "http://www.adobe.com/products/acrobat/access_onlinetools.html"
url = "http://www.europarl.europa.eu/oeil/search_reference_procedure.jsp"
def get_pdf(soup2):
link = soup2.findAll("a", "com_acronym")
new_link = []
amendments = []
for i in link:
if "REPORT" in i["href"]:
new_link.append(i["href"])
if new_link == None:
print "No A number"
else:
for i in new_link:
page = br.open(str(i)).read()
bs = BeautifulSoup(page)
text = bs.findAll("a")
for i in text:
if re.search("PDF", str(i)) != None:
pdf_link = "http://www.europarl.europa.eu/" + i["href"]
pdf = urllib2.urlopen(pdf_link)
name_pdf = "%s_%s.pdf" % (y,p)
localfile = open(name_pdf, "w")
localfile.write(pdf.read())
localfile.close()
br.open(adobe)
br.select_form(name = "convertFrm")
br.form["srcPdfUrl"] = str(pdf_link)
br["convertTo"] = ["html"]
br["visuallyImpaired"] = ["notcompatible"]
br.form["platform"] =["Macintosh"]
pdf_html = br.submit()
soup = BeautifulSoup(pdf_html)
page = range(1,2) #can be set to 400 to get every document for a given year
year = range(1999,2000) #can be set to 2011 to get documents from all years
for y in year:
for p in page:
br = mechanize.Browser()
br.open(url)
br.select_form(name = "byReferenceForm")
br.form["year"] = str(y)
br.form["sequence"] = str(p)
response = br.submit()
soup1 = BeautifulSoup(response)
test = soup1.find(text="No search result")
if test != None:
print "%s %s No page skipping..." % (y,p)
else:
print "%s %s Writing dossier..." % (y,p)
for i in br.links(url_regex="file.jsp"):
link = i
response2 = br.follow_link(link).read()
soup2 = BeautifulSoup(response2)
get_pdf(soup2)
在get_pdf()函数中,我想将pdf文件转换为python中的文本,这样我就可以解析文本以获取有关立法程序的信息。有人能告诉我怎么做吗?
托马斯
听起来你找到了一个解决方案,但是如果你想在没有web服务的情况下完成它,或者你需要根据PDF页面上的精确位置来收集数据,我能推荐我的库pdfquery吗?它基本上将PDF转换成一个lxml树,可以将其输出为XML,也可以使用XPath、PyQuery或其他任何您想要使用的工具进行解析。
要使用它,将文件保存到磁盘后,您将返回
pdf = pdfquery.PDFQuery(name_pdf)
,或者如果不需要保存,则直接传入urllib文件对象。要使用BeautifulSoup解析XML,可以执行pdf.tree.tostring()
。如果您不介意使用JQuery样式选择器,那么这里有一个带有位置扩展的PyQuery接口,这非常方便。例如:
这不完全是魔法。我建议
对于文本提取命令行实用程序,您有a number of possibilities,链接中可能没有提到其他实用程序(可能是基于Java的)。先试试看是否符合你的需要。也就是说,分别尝试每个步骤(查找链接、下载文件、提取文本),然后将它们组合在一起。调用时,请使用
subprocess.Popen
或subprocess.call()
。相关问题 更多 >
编程相关推荐