晚上,
在试图解决这个问题时,我走到了尽头。
简而言之,我正在使用BS4的findAll()函数解析带有标签的产品页面。我得到了正确的响应,但我搜索的区域是“纯文本”,没有标签,我可以使用BS4过滤到目前为止理解
def find_product(counter):
url = base_url
print('Looking in ' + url)
while not matches[counter]:
print(datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))
try:
response1 = search_session.get(url)
except:
print('Unable to connect to site...')
if counter == checkout_qty - 1:
sys.exit()
else:
continue
soup1 = bs(response1.text, 'html.parser')
#soup1.find_all('script')
soup2 = soup1.findAll('script', text = re.compile('id : ')) #using text recompiling doesn't really do anything,just gives a slightly cleaner output of findings.
print(soup2)
for ids in soup2:
link = ids.find(text = re.compile('id'))
#i think i should use it somehow here,but I lack knowledge
#this loop is unfinished
break
这是我从产品页面解析的内容。
<main class="B__container">
<script>
product.p = {
id : 47755536459,
title : "PRODUCT NAME",
handle : "PRODUCT HANDLE",
vendor : "",
available : ,
images : ["image-link.com\/files\/1111"],
featured_image : "image-link.com\/files\/1111",
options : ["Size"],
tags : [],
price : 24000,
variants : []
};
product.p.variants.push({
id : 40113207495,
parent_id : 10025946759,
available : false,
featured_image : null,
public_title : null,
requires_shipping : true,
price : 24000,
options : ["4"],
option1 : "4",
option2 : "",
option3 : "",
option4 : ""
});
product.p.variants.push({
id : 40113207559,
parent_id : 10025946759,
available : false,
featured_image : null,
public_title : null,
requires_shipping : true,
price : 24000,
options : ["4.5"],
option1 : "4.5",
option2 : "",
option3 : "",
option4 : ""
});
product.p.variants.push({
id : 40113207623,
parent_id : 10025946759,
available : false,
featured_image : null,
public_title : null,
requires_shipping : true,
price : 24000,
options : ["5"],
option1 : "5",
option2 : "",
option3 : "",
option4 : ""
});
</script>
我的目标是使用数字提取id,然后将其发送到单独的函数。
问题,缺乏知识或缺乏如何使用BS4充分发挥我想要的技能。
答案 0 :(得分:0)
试试这段代码......这只是字符串操作来获取必要的信息..在这种情况下,id
值。
\n
for
此列表中的每个元素,检查子串id
是否存在True
,请在经过一些操作后打印该行(strip
,split
,replace
)<强>代码:强>
s = soup2.text
data = s.split('\n')
for i, d in enumerate(data):
if " id " in d:
print(data[i].strip().split(':')[1].replace(',', ''))
<强>输出:强>
47755536459
40113207495
40113207559
40113207623
已编辑的代码:
for ids in soup2:
s = ids.text
data = s.split('\n')
for i, d in enumerate(data):
if " id " in d:
print(data[i].strip().split(':')[1].replace(',', ''))
您可以print
代替append
代替list
,而不是if myObject is MyClass {
// myObject is of type MyClass
}
,而是稍后再使用它们。