首先,有一个python脚本可以获得xpath树和美丽的汤给你的网址。
# get tree
def get_tree(url):
r = requests.get(url)
tree = html.fromstring(r.content)
return tree
# get soup
def get_soup(url):
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data)
return soup
我们经常需要树和汤来浏览源代码页并提取我们需要的有用信息。但我们可能经常遇到错误然后修复它,或者我们改变了我们真正需要的信息。所以在这个意义上,序列化汤和xpath树可能是一个好主意,我们只能提前一次。 但是我们如何在python中序列化美丽的汤和xpath树呢? 有没有数据库可以存储汤或树对象?如果没有,手动序列化它们的任何示例代码? 感谢
答案 0 :(得分:3)
我从您的问题中了解到,您希望存储汤变量,这样您就不必在调试时反复请求URL。好像你不知道可以序列化任何对象的python pickle module。它并非没有问题,但是为了满足您的调试需求,它可以帮助您,而且非常简单。
import pickle
pickle.dump(soup, open("soup.pickle","w"))
# then when you need to load the soup again
soup = pickle.load(open("soup.pickle","r"))
现在你得到了一个泡菜汤! :d
答案 1 :(得分:0)
使用lxml时都很简单:
tree = lxml.html.fromstring(html)
i_need_element = tree.xpath('//a[@class="shared-components"]/@href')
但是使用BeautifulSoup BS4时也非常简单:
尝试这个魔术:
soup = BeautifulSoup(html, "lxml")
i_need_element = soup.select ('a[class*="shared-components"]')
如您所见,它不支持子标签,因此我删除了“ / @ href”部分