可以将 xpath 直接复制并粘贴到漂亮的汤解析器中,还是必须对其进行修改?
Can xpaths be copied and pasted directly into beautiful soup parsers, or must they be modified?
我想从 this 网页中提取 PMID(即数字“23410195”)。
我通过查看页面源代码获得了 firefox 中的 xpath,右键单击我想要的元素,然后单击粘贴 xpath,进入此代码:
import pandas as pd
import requests
import lxml
from lxml import etree
from lxml import html
import requests
from bs4 import BeautifulSoup as bs
output_file = open('neuropep.txt', 'a')
from urllib.request import urlopen
for i in range(1,2):
# try:
number = '{:05}'.format(i)
url = 'http://isyslab.info/NeuroPep/search_info?pepNum=NP' + str(number)
response = urlopen(url)
htmlparser = etree.HTMLParser()
tree = etree.parse(response,htmlparser)
var = tree.xpath('/html/body/div/div[3]/table/tbody/tr[14]/td[2]/ol/li/p/span/a')
print(var)
但是输出只是一个空列表?
我尝试了其他一些不成功的方法:例如
content = requests.get(url)
soup = bs(content.content,'lxml')
/html/body/div/div[3]/table/tbody/tr[14]/td[2]/ol/li/p/span/a
table = soup.find_all('table')
print(table[0])
我只是想知道这里有什么?具体来说,为什么当我复制并粘贴一个元素的xpath时,为什么输出是一个空列表?
您不需要指定绝对 xpath。使用相对 xpath 来识别 PMID。
在这个特定的网站中,他们通过将 PMID 包含在 span
中来简化操作
你可以试试 .//span[@id='pmid']/a
如果您右键单击该页面并选择 select "view page source" 选项,您将看到您要查找的内容是动态显示的还是原始显示的 html 页面源,最重要的是它是否从那里开始。在这种情况下,数字不在 html 中,但它在脚本标记中可用。所以你必须相应地调整你的逻辑。
pmid
通过Javascript注入页面。
可以使用selenium
解压,或者re
模块:
import re
import requests
url = 'http://isyslab.info/NeuroPep/search_info?pepNum=NP00001'
m = re.findall(r"var reference = String\('(\d+)", requests.get(url).text)
if m:
print(m[0])
打印:
23410195
我想从 this 网页中提取 PMID(即数字“23410195”)。
我通过查看页面源代码获得了 firefox 中的 xpath,右键单击我想要的元素,然后单击粘贴 xpath,进入此代码:
import pandas as pd
import requests
import lxml
from lxml import etree
from lxml import html
import requests
from bs4 import BeautifulSoup as bs
output_file = open('neuropep.txt', 'a')
from urllib.request import urlopen
for i in range(1,2):
# try:
number = '{:05}'.format(i)
url = 'http://isyslab.info/NeuroPep/search_info?pepNum=NP' + str(number)
response = urlopen(url)
htmlparser = etree.HTMLParser()
tree = etree.parse(response,htmlparser)
var = tree.xpath('/html/body/div/div[3]/table/tbody/tr[14]/td[2]/ol/li/p/span/a')
print(var)
但是输出只是一个空列表?
我尝试了其他一些不成功的方法:例如
content = requests.get(url)
soup = bs(content.content,'lxml')
/html/body/div/div[3]/table/tbody/tr[14]/td[2]/ol/li/p/span/a
table = soup.find_all('table')
print(table[0])
我只是想知道这里有什么?具体来说,为什么当我复制并粘贴一个元素的xpath时,为什么输出是一个空列表?
您不需要指定绝对 xpath。使用相对 xpath 来识别 PMID。
在这个特定的网站中,他们通过将 PMID 包含在 span
你可以试试 .//span[@id='pmid']/a
如果您右键单击该页面并选择 select "view page source" 选项,您将看到您要查找的内容是动态显示的还是原始显示的 html 页面源,最重要的是它是否从那里开始。在这种情况下,数字不在 html 中,但它在脚本标记中可用。所以你必须相应地调整你的逻辑。
pmid
通过Javascript注入页面。
可以使用selenium
解压,或者re
模块:
import re
import requests
url = 'http://isyslab.info/NeuroPep/search_info?pepNum=NP00001'
m = re.findall(r"var reference = String\('(\d+)", requests.get(url).text)
if m:
print(m[0])
打印:
23410195