Below I’ve copied my python instance. I’m trying to parse medline data. I’ve done this with your pubmed and medline parser on the listed machine as well as on a ubuntu server with the same error. I’ve also generated a file using the R programming language. If you are familiar with that, the package I used is called easyPubMed. I used the batch_pubmed_download() function.
Anyways I’d really like to use your code, especially as it links the authors with their affiliated institutions.
I’m new to XML parsing so I have no idea what I’m doing in that respect.
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
>>>import pubmed_parser as pp
>>>pp.parse_pubmed_xml('C:\Users\Work\Downloads\medline16n0902.xml')
Error: it was not able to read a path, a file-like object, or a string as an XML
Traceback (most recent call last):
File "C:Program FilesPython36libsite-packagespubmed_parser-0.1-py3.6.eggpubmed_parserutils.py", line 14, in read_xml
tree = etree.parse(path)
File "srclxmllxml.etree.pyx", line 3427, in lxml.etree.parse (srclxmllxml.etree.c:81101)
File "srclxmlparser.pxi", line 1811, in lxml.etree._parseDocument (srclxmllxml.etree.c:117832)
File "srclxmlparser.pxi", line 1837, in lxml.etree._parseDocumentFromURL (srclxmllxml.etree.c:118179)
File "srclxmlparser.pxi", line 1741, in lxml.etree._parseDocFromFile (srclxmllxml.etree.c:117091)
File "srclxmlparser.pxi", line 1138, in lxml.etree._BaseParser._parseDocFromFile (srclxmllxml.etree.c:111637)
File "srclxmlparser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (srclxmllxml.etree.c:105093)
File "srclxmlparser.pxi", line 706, in lxml.etree._handleParseResult (srclxmllxml.etree.c:106801)
File "srclxmlparser.pxi", line 633, in lxml.etree._raiseParseError (srclxmllxml.etree.c:105612)
OSError: Error reading file 'medline16n0902.xml': failed to load external entity "medline16n0902.xml"
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:Program FilesPython36libsite-packagespubmed_parser-0.1-py3.6.eggpubmed_parsermedline_parser.py", line 354, in parse_medline_xml
tree = read_xml(path)
File "C:Program FilesPython36libsite-packagespubmed_parser-0.1-py3.6.eggpubmed_parserutils.py", line 17, in read_xml
tree = etree.fromstring(path)
File "srclxmllxml.etree.pyx", line 3213, in lxml.etree.fromstring (srclxmllxml.etree.c:78994)
File "srclxmlparser.pxi", line 1848, in lxml.etree._parseMemoryDocument (srclxmllxml.etree.c:118325)
File "srclxmlparser.pxi", line 1729, in lxml.etree._parseDoc (srclxmllxml.etree.c:116883)
File "srclxmlparser.pxi", line 1063, in lxml.etree._BaseParser._parseUnicodeDoc (srclxmllxml.etree.c:110870)
File "srclxmlparser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (srclxmllxml.etree.c:105093)
File "srclxmlparser.pxi", line 706, in lxml.etree._handleParseResult (srclxmllxml.etree.c:106801)
File "srclxmlparser.pxi", line 635, in lxml.etree._raiseParseError (srclxmllxml.etree.c:105655)
File "<string>", line 1
lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1
Я запускал этот файл на прошлой неделе, и он работал отлично, но вдруг сегодня он не работает, я ничего не менял в нем. Вы можете мне помочь, пожалуйста?
Это мой код на Python:
from lxml import etree
import numpy as np
#Parsing the xml file and creating lists
tree = etree.parse("AnyConv.com__CCSOPM Section 1_Master (1).xml")
root = tree.getroot()
Lista = []
tags = []
#Get the unique tags values
for element in root.iter():
Lista.append(element.tag)
tags = np.unique(Lista)
#Show the unique tag[attributes] pairs
for tag in tags:
print(tag,root.xpath(f'//{tag}')[0].attrib.keys())
#Changes the tag name to the comply365's tag's name
for p in tree.findall(".//sect1"):
p.tag = ("section")
for p in tree.findall(".//sect1"):
p.tag = ("section")
for p in tree.findall(".//informaltable"):
p.tag = ("table")
#Modify the tag's attributes to its desired form
for cy in root.xpath('//section'):
cy.attrib['xmlns']='http://www.w3.org/2001/XMLSchema-instance'
cy.attrib['id']='123'
cy.attrib['type']='policy'
cy.attrib['xsi']='urn:fontoxml:cpa.xsd:1.0'
for t in root.xpath('//title'):
t.attrib['id']='123456789'
for p in root.xpath('//para'):
p.attrib['id']='987654321'
for p in root.xpath('//table'):
p.attrib['id']='11111'
for ct in root.xpath('//concept'):
ct.attrib.pop("id", None)
#Print the new xml to make sure it worked:
#print(etree.tostring(root).decode())
tree.write("Resultado de tags XML-COMPLY365.xml")
Теперь это вызывает:
OSError: Error reading file 'AnyConv.com__CCSOPM Section 1_Master (1).xml': failed to load external entity "AnyConv.com__CCSOPM Section 1_Master (1).xml"
Если у вас есть идеи, как это исправить, не стесняйтесь оставлять комментарии.
1 ответ
Лучший ответ
Часть (1)
в имени файла предполагает, что у вас уже есть AnyConv.com__CCSOPM Section 1_Master .xml
на вашем компьютере, а вы попытался скопировать файл с таким именем на ваш компьютер еще раз.
Также обратите внимание, что имя вашего файла содержит пробел перед (1)
, и это странный. Это, в свою очередь, предполагает, что имя вашего «первого» файла (без (1)
) заканчивается пробелом (и это очень странно).
Убедитесь, что ваш файл действительно существует. Или, возможно, измените его название на AnyConv.com__CCSOPM Section 1_Master.xml
, то есть:
- без конечного пробела,
- без
(1)
в конце. Затем измените имя файла в своем коде соответствующим образом.
Также обратите внимание, что имя вашего файла содержит двойное подчеркивание, и это тоже странная практика. Убедитесь, что это подчеркивание в имени файла на самом деле двойное.
Хранение на вашем компьютере множества файлов с одинаковыми именами (с числовым суффикс «в названии») также является плохой практикой. Еще худшая практика — ссылаться на такие «дублированные» файлы в вашем коде. Измените имя файла на одно без такого «числового суффикса» (в этом case (1)
) и задайте такое же имя файла в коде.
Еще один совет: какое бы имя у вашего файла:
- щелкните по нему (один раз) в окне Проводник ,
- нажмите клавишу
F2
, вы открываете редакцию этого файла, но пока отмеченный текст не включает расширение имени файла (в данном случае «.xml»), - нажмите
Ctrl-A
, чтобы расширить текстовую пометку до всего имени (с расширением). - нажмите
Ctrl-C
, чтобы скопировать имя файла в буфер обмена, - нажмите
Esc
, чтобы закрыть редактирование имени файла, - откройте редактор кода, поместите курсор туда, где находится ваше имя файла, и отметьте все имя файла,
- нажмите
Ctrl-V
, чтобы заменить его содержимым буфера обмена.
Теперь в вашем коде будет фактическое имя файла.
Также убедитесь, что каталог, содержащий этот файл, находится в списке каталогов, просканированных Python при попытке открыть файл.
1
Valdi_Bo
2 Авг 2021 в 06:44
Hello, so I’m having two or three errors, at the moment I’m trying to request something from it. The code I’m having is
2020-06-30 22:10:23,230: Exception on /comparar [POST]
Traceback (most recent call last):
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/pandas/io/html.py", line 718, in _build_doc
r = parse(self.io, parser=parser)
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/lxml/html/__init__.py", line 939, in parse
return etree.parse(filename_or_url, parser, base_url=base_url, **kw)
File "src/lxml/etree.pyx", line 3521, in lxml.etree.parse
File "src/lxml/parser.pxi", line 1839, in lxml.etree._parseDocument
File "src/lxml/parser.pxi", line 1865, in lxml.etree._parseDocumentFromURL
File "src/lxml/parser.pxi", line 1769, in lxml.etree._parseDocFromFile
File "src/lxml/parser.pxi", line 1163, in lxml.etree._BaseParser._parseDocFromFile
File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult
File "src/lxml/parser.pxi", line 638, in lxml.etree._raiseParseError
OSError: Error reading file '': failed to load external entity ""
**NO MATCH**
During handling of the above exception, another exception occurred:
**NO MATCH**
Traceback (most recent call last):
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/Franconline/version1/app_web.py", line 20, in comparar
main.hacerTablas('primeraTabla.csv',plan1)
File "/home/Franconline/version1/prueba.py", line 66, in hacerTablas
hacerArchivoCsv(url,tabla)
File "/home/Franconline/version1/prueba.py", line 18, in hacerArchivoCsv
tabla1 = read_html(urlDeTabla,attrs={"class":"table-bordered"})
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/pandas/io/html.py", line 1085, in read_html
return _parse(
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/pandas/io/html.py", line 895, in _parse
tables = p.parse_tables()
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/pandas/io/html.py", line 213, in parse_tables
tables = self._parse_tables(self._build_doc(), self.match, self.attrs)
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/pandas/io/html.py", line 726, in _build_doc
r = fromstring(self.io, parser=parser)
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/lxml/html/__init__.py", line 875, in fromstring
doc = document_fromstring(html, parser=parser, base_url=base_url, **kw)
File "/home/Franconline/.virtualenvs/flaskk/lib/python3.8/site-packages/lxml/html/__init__.py", line 761, in document_fromstring
value = etree.fromstring(html, parser, **kw)
File "src/lxml/etree.pyx", line 3237, in lxml.etree.fromstring
File "src/lxml/parser.pxi", line 1876, in lxml.etree._parseMemoryDocument
File "src/lxml/parser.pxi", line 1757, in lxml.etree._parseDoc
File "src/lxml/parser.pxi", line 1068, in lxml.etree._BaseParser._parseUnicodeDoc
File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult
File "src/lxml/parser.pxi", line 649, in lxml.etree._raiseParseError
File "<string>", line 0
lxml.etree.XMLSyntaxError: b'failed to load external entity ""'
I read in other posts that you have kind of a whitelist for pages and so, and I don’t know if this have something to do with it. But anyways, I’m having this trouble, maybe someone can help me with this. Thanks.