क्या कोई अजगर पुस्तकालय है जो दिए गए रेगेक्स से मेल खाने वाले डोम नोड्स के xpaths प्राप्त करने में सुविधा प्रदान करता है?

मैं एक अक्सर पूछे जाने वाले प्रश्न पृष्ठ से प्रश्न और उत्तर जोड़ी लाने की कोशिश कर रहा हूँ

ये इस साइट

xpath1: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[7]/div[1]/a/span
xpath2: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[10]/div[1]/a/span
xpath3: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[3]/div[1]/div[1]/div[1]/a/span

अब रेगेक्स को ऐसा कुछ होने दें:

/html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/ * / * / * /div[1]/a/span

क्या पाइथन में कुछ लाइब्रेरी के माध्यम से बनाए गए रेगेक्स को संतुष्ट करने वाले सभी xpaths प्राप्त करना संभव है?

मैंने सभी प्रश्नों को लाने के लिए स्क्रैपी चयनकर्ताओं का उपयोग करने की कोशिश की, लेकिन उत्तर प्राप्त करते समय यह विफल हो रहा है, इसलिए मैं सभी प्रश्नों के माध्यम से जाना चाहता हूं और फिर उनके उत्तर प्राप्त करना चाहता हूं, इसके लिए मुझे प्रश्न Xpaths चाहिए

0
Satyaaditya 12 सितंबर 2018, 12:55

2 जवाब

सबसे बढ़िया उत्तर

आपको टूल या रेगेक्स (साथ ही पूर्ण XPath एक्सप्रेशन) की आवश्यकता नहीं है। पृष्ठ पर सभी प्रश्नों का मिलान करने के लिए नीचे दिए गए XPath का उपयोग करने का प्रयास करें:

//div[@class="ClsInnerDrop"]/a

यदि आप नहीं जानते कि अपने स्वयं के चयनकर्ताओं को कैसे लिखना है, तो इस cheatsheet

2
Andersson 12 सितंबर 2018, 13:05

अंत में, मुझे इसके लिए एलएक्सएमएल और स्क्रैपी के संयोजन के साथ समाधान मिला। चयनकर्ता का उपयोग करके सभी पाठ सामग्री को खोजने के लिए @Andersson उत्तर का उपयोग किया और फिर प्रत्येक पाठ के लिए, पेड़ पर पुनरावृत्त किया और lxml से tree.getpath() का उपयोग किया

समाधान रेगेक्स आधारित नहीं है लेकिन मेरे उपयोग-मामले को हल करता है, इसलिए इसे पोस्ट करना

import requests
from lxml import html

def get_xpath_for_text(tree, text):
 try:
    for tag in tree.iter():
        if tag.text and tag.text == text:
            return tree.getpath(tag)
    return ' '
 except Exception as e:
    return ' '

 webpage = requests.get(url)
 html_content = html.fromstring(webpage.text)
 tree= html_content.getroottree()
 get_xpath_for_text(tree, text)
0
Satyaaditya 17 सितंबर 2018, 13:11