我正在尝试从web of science
中删除数据以下是我要与之合作的specific page。
以下是我用于提取摘要的代码:
import lxml
import requests
url = 'https://apps.webofknowledge.com/full_record.do?product=WOS&search_mode=GeneralSearch&qid=2&SID=Q1yAnqE4al4KxALF7RM&page=1&doc=3&cacheurlFromRightClick=no'
s = requests.Session()
d = s.get(url)
soup1 = etree.HTML(d.text)
这是我通过Chrome中的副本xpath获得的xpath:
//*[@id="records_form"]/div/div/div/div[1]/div/div[4]/p/text()
所以我试着像这样得到摘要
path = '//*[@id="records_form"]/div/div/div/div[1]/div/div[4]/p/text()'
print(soup1.xpath(path))
但是,我只是热了一个空列表!然后我尝试了另一种测试xpath的方法。
首先,我将特定页面保存为本地html文件。
with open('1.html','w',encoding='UTF=8') as f:
f.write(d.text)
f.close()
然后,打开文件
s.mount('file://',FileAdapter())
d = s.get('file:///K:/single_paper.html')
soup2 = etree.HTML(d.text)
soup2.xpath('//*[@id="records_form"]/div/div/div/div[1]/div/div[4]/p/text()')
它给了我想要的摘要!谁能告诉我为什么会这样?
已经当我尝试使用保存本地文件方式执行其他页面的步骤时,它会再次返回一个空列表!
我检查过Chrome给出的xpath对于这两个页面是一样的。
所以有人能告诉我我的代码有什么问题以及如何修复它?
答案 0 :(得分:1)
给定完整X路径的浏览器通常是unhelpful,您应该根据属性(例如id,class等)或任何识别功能(如contains(@ href,'image'))使用相对和聪明的。 / p>
您可以尝试更具体的xpath表达式:(//div[@class="block-record-info"])[2]/p/text()
并重写您的代码:
import requests
from lxml import html
url = 'https://apps.webofknowledge.com/full_record.do?product=WOS&search_mode=GeneralSearch&qid=2&SID=Q1yAnqE4al4KxALF7RM&page=1&doc=3&cacheurlFromRightClick=no'
s = requests.Session()
r = s.get(url)
tree = html.fromstring(r.content)
element = tree.xpath('(//div[@class="block-record-info"])[2]/p/text()')
print(element)