मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां मुझे 1000 से अधिक पृष्ठों से लिंक निकालने की आवश्यकता है। मेरी समस्या यह है कि प्रत्येक पृष्ठ में बहुत से लिंक हैं जिनकी मुझे आवश्यकता नहीं है और मैं उन्हें फ़िल्टर करने के लिए संघर्ष कर रहा हूं।

मैंने लिंक को और अधिक विशिष्ट बनाने की कोशिश की है लेकिन इससे मुझे आवश्यक परिणाम भी समाप्त हो जाते हैं। मैंने नियमित अभिव्यक्तियों का उपयोग करने का भी प्रयास किया है, हालांकि मुझे उनके साथ अनुभव की कमी है इसलिए मैंने उन्हें गलत इस्तेमाल किया होगा।

import requests
from bs4 import BeautifulSoup
from bs4 import SoupStrainer
import re

only_a_tags = SoupStrainer("a", href=re.compile("scp-^[0-5000]+$"))

for i in range(680, 690):
    URL = "http://www.scp-wiki.net/scp-"+ str (i)
    response = requests.get(URL)
    html_doc = response.text

    print(BeautifulSoup(html_doc, "html.parser", parse_only=only_a_tags).prettify())

मुझे इस तरह के प्रारूपित किसी भी लिंक को प्रिंट करने की आवश्यकता है http://www.scp-wiki। net/scp-[नंबर यहाँ]। इसे पूरी चीज़ को प्रिंट करने की ज़रूरत नहीं है, बस scp- [नंबर यहाँ]।

अभी यह कुछ भी प्रिंट नहीं करता है

0
Sam Sagarin 18 जुलाई 2019, 21:15

1 उत्तर

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

जब आप रेगेक्स को scp-\d+ में बदलते हैं, तो यह आपके लिंक प्रिंट करेगा:

import requests
from bs4 import BeautifulSoup
from bs4 import SoupStrainer
import re

only_a_tags = SoupStrainer("a", href=re.compile("scp-\d+"))

for i in range(680, 690):
    URL = "http://www.scp-wiki.net/scp-" + str(i)
    response = requests.get(URL)
    html_doc = response.text

    print(BeautifulSoup(html_doc, "html.parser", parse_only=only_a_tags).prettify())

प्रिंट:

<a href="/scp-679">
 SCP-679
</a>
<a href="/scp-681">
 SCP-681
</a>
<a class="btn btn-default" href="/forum/t-146364/scp-680" id="discuss-button">
 Discuss (19)
</a>
<a href="/scp-680">
 SCP-680
</a>
<a href="/scp-682">
 SCP-682

... and so on.
0
Andrej Kesely 18 जुलाई 2019, 21:21