সাইটম্যাপ থেকে লিংকগুলি বের করুন (এক্সএমএল)


5

sitemap.xmlএই ডেটা সহ আমার কাছে একটি ফাইল রয়েছে বলে দিন :

<url>
<loc>http://domain.com/pag1</loc>
<lastmod>2012-08-25</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>http://domain.com/pag2</loc>
<lastmod>2012-08-25</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>http://domain.com/pag3</loc>
<lastmod>2012-08-25</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>

আমি এটি থেকে সমস্ত অবস্থানগুলি বের করতে চাই (এর মধ্যে ডেটা <loc>এবং </loc>)।

নমুনা আউটপুট যেমন হতে পারে:

http://domain.com/pag1
http://domain.com/pag2
http://domain.com/pag3

কিভাবে এই কাজ করতে?


আপনি কোন ওএস ব্যবহার করছেন?
ববমাগু

উইন্ডোজ 7 আলটিমেট এক্স 64 / উইন্ডোজ 8 প্রো এক্স 64 বা উবুন্টু 12.04 লিনাক্স।
অক্ষত মিত্তাল

সুন্দর সেটআপ। উবুন্টু বাক্সে টার্মিনাল ব্যবহার করে, নীচের আমার উত্তরটি আপনার যা প্রয়োজন তা পেয়ে যাবেন।
বোবমাগু

আপনি সাব্লাইম টেক্সট 2 এর মতো যে কোনও পাঠ্য সম্পাদকও ব্যবহার করতে পারেন যা রেজিএক্সপ্যাক্স ব্যবহার করতে পারে, আপনি এটির সাথে সমস্ত ডেটা পেতে পারেন, বা পাইথনটি ব্যবহার করতে পারেন আমার উত্তরটি নীচে দেখুন।
ikশিকাওয়া ইয়োশি

উত্তর:


2

আপনি এখানে পাইথন স্ক্রিপ্ট ব্যবহার করতে পারেন

এই স্ক্রিপ্টটি কোনও লিঙ্ক http সহ শুরু করে

import re

f = open('sitemap.xml','r')
res = f.readlines()
for d in res:
    data = re.findall('>(http:\/\/.+)<',d)
    for i in data:
        print i

এবং আপনার ক্ষেত্রে পরবর্তী স্ক্রিপ্টে ট্যাগগুলিতে মোড়ানো সমস্ত ডেটা সন্ধান করুন

import re

f = open('sitemap.xml','r')
res = f.readlines()
for d in res:
    data = re.findall('<loc>(http:\/\/.+)<\/loc>',d)
    for i in data:
        print i

আপনি যদি এর সাথে পরিচিত না হন তবে রেজিপেক্সের সাথে খেলতে এখানে দুর্দান্ত সরঞ্জাম।

আপনার যদি দূরবর্তী ফাইলটি লোড করতে হয় তবে আপনি পরবর্তী কোড ব্যবহার করতে পারেন

import urllib2 as ur
import re

f = ur.urlopen(u'http://server.com/sitemap.xml')
res = f.readlines()
for d in res:
  data = re.findall('<loc>(http:\/\/.+)<\/loc>',d)
  for i in data:
    print i

রিমোট ফাইলটি কীভাবে লোড করবেন http://server.com/sitemap.xml। আমি পাইথনের তেমন পরিচিত নই
অক্ষত মিতাল

আপনি অজগর বোঝা মানে?
ikশিকাওয়া ইয়োশি

হ্যাঁ, আপনি যেমন f = open('sitemap.xml','r')ফাইলটি খোলার জন্য ব্যবহার করেছেন , HTTP সার্ভারে একটি দূরবর্তী ফাইল কীভাবে খুলবেন?
অক্ষত মিতল

আমি আমার পোস্ট আপডেট করি, আপনাকে urllib2 মডিউলটি ব্যবহার করতে হবে
ইয়োশি

ত্রুটি দেখায়AttributeError: 'list' object has no attribute 'findall'
অক্ষত মিত্তাল

9

আপনি যদি লিনাক্স বাক্সে বা গ্রেপ সরঞ্জামের সাথে কিছু থাকেন তবে আপনি কেবল চালাতে পারেন:

গ্রেপ -পো 'http (গুলি?): // [^ \ "() \ <>] *' সাইটম্যাপ.এক্সএমএল


এটি কাজ করেছে তবে প্রচুর ভুল সহ (অসম্পূর্ণ URL- এর)।
অক্ষত মিতল

অদ্ভুত, আমি এটি কেবল গুগলের সাইটম্যাপ.এক্সএমএল ফাইলের মধ্যে দিয়েছি এবং কোনও সমস্যা দেখিনি। কোনটি মিস করেছেন?
ববমাগু

এটি অনেকগুলি ইউআরএল মিস করেছে যা "রয়েছে?" এবং "+"।
অক্ষত মিতল

ধন্যবাদ. যে কেউ ফাইলে সংরক্ষণ করতে চানgrep -Po 'http(s?)://[^ \"()\<>]*' sitemap.xml > links.txt
ট্র্যান্ট করুন

+1 এটি আসলে খুব সহজ তবে শক্তিশালী সমাধান।
স্মলচিস

2

এটি একটি একক সেড কমান্ড দ্বারা সম্পন্ন হতে পারে যা গ্রেপ সমাধানের চেয়ে আরও শক্ত বলে মনে হয়:

sed '/<loc>/!d; s/[[:space:]]*<loc>\(.*\)<\/loc>/\1/' inputfile > outputfile

(পাওয়া গেছে: linuxquestions.org এ )


আপনার সমাধান নিখুঁতভাবে কাজ করে।
ব্যাপটিস্ট ডোনাক্স

এটিকে '/ <loc> /! d হিসাবে ব্যবহার করে দেখেছি; এস / [[স্পেস:]] * <loc> (। *) <\ / লোকাল / / 1 / 'সাইটম্যাপ.এক্সএমএল> লিঙ্কস.টিএসটি তবে এটি একই এক্সএমএল সামগ্রীকে আউটপুট করে। এটি উপরের গ্রেপ কমান্ডের সাথে কাজ করেছে তবে আমি কেন এটি কাজ করে নি তা
মাইক ২

আমি মনে করি এটি কারণ যে আপনি (এবং) দিয়ে () এড়ালেন না।
লার্স

1

ব্যবহার করে XSLT, আপনি এটি দিয়ে দিতে পারেনXPath

/url/loc

4
আপনি সম্ভবত নিজের উত্তরটি প্রসারিত করতে এবং XSLT নির্দেশাবলী এবং প্রয়োজনীয় XPath কোয়েরিগুলি প্রদর্শন করতে পারেন?

@ এসএলএইচসি ঠিক কী বলতে চেয়েছিলাম, উত্তরটি আরও ব্যাখ্যামূলক হওয়া উচিত।
অক্ষত মিতল

আমি এই সম্পর্কে আরও কিছু পড়লাম এবং শেষ পর্যন্ত এই কাজ পেয়েছিলাম। Upvoting কিন্তু চয়ন করা সত্যিই ভাল উত্তর নয়।
অক্ষত মিতল

0

এক্সএসএলটি সমাধান:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:s="http://www.sitemaps.org/schemas/sitemap/0.9">

  <xsl:output method="text" />

  <xsl:template match="s:url">
    <xsl:value-of select="s:loc" />
    <xsl:text>
</xsl:text>
  </xsl:template>

</xsl:stylesheet>

বছরের পর বছর ধরে আমি এটির জন্য রেইগেক্স ইত্যাদি ব্যবহার করে আসছি তবে এক্সএসএলটি এই ক্ষেত্রে খুব শীতল :) এক্সএসএলটি-র সম্পূর্ণ নুবসের জন্য (আমার মতো) আপনার কেবলমাত্র যা করতে হবে তা যুক্ত করা ভাল লাগবে: এই কোডটি সংরক্ষণ করুন স্টাইলসীট.এক্সএসএল হিসাবে এবং স্টাইলশিট <? xML- স্টাইলশিট টাইপ = "টেক্সট / এক্সএসএল" সংস্করণ = "1.0" href = "স্টাইলশীট.এক্সএসএল" এর লিঙ্কযুক্ত আপনার এক্সএমএল নথিতে একটি সারি যুক্ত করুন?> তারপরে ব্রাউজারে আপনার এক্সএমএল খুলুন (এটি স্থানীয় ফাইল হিসাবে খোলার সময় কাজ করবে না, আপনাকে এটি HTTP- র মাধ্যমে পেতে হবে)
asukasz Rysiak
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.