পাইথনের সাথে ওয়েব স্ক্র্যাপিং [বন্ধ]


183

আমি কোনও ওয়েবসাইট থেকে প্রতিদিন সূর্যোদয় / সূর্যাস্তের সময়গুলি গ্রহণ করতে চাই। পাইথনের সাহায্যে ওয়েব সামগ্রী স্ক্র্যাপ করা সম্ভব? মডিউলগুলি কি ব্যবহৃত হয়? কোন টিউটোরিয়াল উপলব্ধ আছে?


3
পাইথনের ওয়েব স্ক্র্যাপিংয়ের জন্য বেশ কয়েকটি বিকল্প রয়েছে। অনুরূপ প্রশ্নের জবাবে আমি এখানে কয়েকটি অপশন গণনা করেছি ।
ফিলিপ্পো

পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে কেবল বিল্ট ইন এইচটিএমএল পার্সার ব্যবহার করবেন না কেন? অবশ্যই খুব সহজ এবং বিরল কাজের জন্য (দিনে মাত্র একবার), আমি অন্য কোনও সরঞ্জাম অনুসন্ধান করার সামান্য কারণ দেখি। docs.python.org/2.7/library/htmlparser.html
আর্টঅফ ওয়ারফেয়ার

আশা করি এই পোস্টটি কারও পক্ষে কার্যকর হতে পারে। একটি শিক্ষানবিস জন্য একটি ভাল টিউটোরিয়াল। samranga.blogspot.com/2015/08/web-scraping-beginner-python.html এটি পাইথন দিয়ে ওয়েব স্ক্র্যাপ করার জন্য সুন্দর স্যুপ পাইথন লাইব্রেরি ব্যবহার করে।
সম্মিতা চঠুরঙ্গ

উত্তর:


187

উজ্জ্বল বিউটিফুলসপ লাইব্রেরির সাথে মিলিয়ে urllib2 ব্যবহার করুন :

import urllib2
from BeautifulSoup import BeautifulSoup
# or if you're using BeautifulSoup4:
# from bs4 import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen('http://example.com').read())

for row in soup('table', {'class': 'spad'})[0].tbody('tr'):
    tds = row('td')
    print tds[0].string, tds[1].string
    # will print date and sunrise

7
ছোট মন্তব্য: এটি অনুরোধ প্যাকেজটি ব্যবহার করে সামান্য সরল করা যেতে পারে লাইন line এর পরিবর্তে: স্যুপ = বিউটিফুলসুফ (অনুরোধ.জেট (' example.com')। পাঠ্য )
ডি কোয়েটজি

4
বখশিশের জন্য ধন্যবাদ. অনুরোধ প্যাকেজটি এখনও উপস্থিত ছিল না, যখন আমি উপরে স্নিপেট লিখেছিলাম ;-)

1
@ ডেরিককয়েজি - আপনার সরলকরণটি মিসিংস্কেমা ত্রুটি উত্থাপন করেছে (কমপক্ষে আমার ইনস্টলেশনে)। এটি কাজ করে:soup = BeautifulSoup(requests.get('http://example.com').text)
কিমিটে

@ কেমোট: আমি যা টাইপ করেছি তা কিন্তু backticksকোডের চারপাশে ভুলে গিয়েছিলাম এবং এটি এটিকে একটি লিঙ্কে রূপান্তরিত করে। ধন্যবাদ!
ডি কোয়েটজি

আপনি কীভাবে নিশ্চিত যে সামগ্রীটি টিডি এবং ট্রিতে থাকবে। এটি উল এবং লিও ঠিক থাকতে পারে?
শশাঙ্ক হেগডে

62

আমি সত্যিই থেরাপির পরামর্শ দিই।

মুছে দেওয়া উত্তর থেকে উদ্ধৃতি:

  • স্ক্রেরি ক্রলিং যান্ত্রিকীকরণের চেয়ে দ্রুততম কারণ অ্যাসিনক্রোনাস অপারেশনগুলি (ট্যুইস্টেড শীর্ষে) ব্যবহার করে।
  • LibxML2 এর শীর্ষে পার্সিং (এক্স) এইচটিএমএল জন্য স্কেরাপির আরও ভাল এবং দ্রুত সমর্থন রয়েছে।
  • স্কেরাপি সম্পূর্ণ ইউনিকোড, পুনর্নির্দেশগুলি, জিজেপড প্রতিক্রিয়াগুলি, বিজোড় এনকোডিংস, ইন্টিগ্রেটেড এইচপি ক্যাশে ইত্যাদি সহ একটি পরিপক্ক কাঠামো is
  • একবার আপনি স্কেরাপিতে আসার পরে, আপনি 5 মিনিটেরও কম সময়ে একটি মাকড়সা লিখতে পারেন যা চিত্রগুলি ডাউনলোড করে, থাম্বনেইল তৈরি করে এবং এক্সট্রাক্ট করা ডেটা সরাসরি সিএসভি বা জেসসনে রফতানি করে।

13
আমি এই প্রশ্নটি ইতিমধ্যে 2 বছর পুরানো লক্ষ্য করেছি না, এখনও মনে হয় অন্য কারও যদি একই রকম প্রশ্ন আসে তবে স্কেরাপির নাম এখানে রাখা উচিত।
সজাক ট্রেখাক

4
স্কেরাপি একটি কাঠামো, এবং তাই ভয়াবহ এবং এটি আপনার প্রকল্পের চেয়ে গুরুত্বপূর্ণ বলে মনে করে। ট্যুইস্টডের ভয়াবহ (অপ্রয়োজনীয়) সীমাবদ্ধতার কারণে এটি একটি কাঠামো।
ব্যবহারকারী 1244215

4
@ ব্যবহারকারী 1244215: ফ্রেমওয়ার্কগুলি দুর্দান্ত কারণ এটি একটি কাঠামো। যদি আপনি এটিকে ফ্রেমওয়ার্ক হিসাবে ব্যবহার করতে না চান তবে আপনার সমস্ত কোডকে একটি ফাইলে জ্যাম করা থেকে বিরত করার কিছুই নেই।
ব্লেন্ডার

1
তবে এটি পাইথন 3.x সমর্থন করে না।

17

আমি আমার ওয়েব স্ক্র্যাপিংয়ের কাজগুলি থেকে এই বিট-বালতি লাইব্রেরিতে একসাথে সংগ্রহ করেছি ।

আপনার ক্ষেত্রে উদাহরণ স্ক্রিপ্ট:

from webscraping import download, xpath
D = download.Download()

html = D.get('http://example.com')
for row in xpath.search(html, '//table[@class="spad"]/tbody/tr'):
    cols = xpath.search(row, '/td')
    print 'Sunrise: %s, Sunset: %s' % (cols[1], cols[2])

আউটপুট:

Sunrise: 08:39, Sunset: 16:08
Sunrise: 08:39, Sunset: 16:09
Sunrise: 08:39, Sunset: 16:10
Sunrise: 08:40, Sunset: 16:10
Sunrise: 08:40, Sunset: 16:11
Sunrise: 08:40, Sunset: 16:12
Sunrise: 08:40, Sunset: 16:13

10

আমি দৃ strongly়ভাবে pyquery চেক আউট পরামর্শ দিতে হবে । এটি jquery- জাতীয় (ওরফে সিএসএস-মত) সিনট্যাক্স ব্যবহার করে যা সেই ব্যাকগ্রাউন্ড থেকে আগত ব্যক্তিদের জন্য জিনিসগুলি সহজ করে তোলে।

আপনার ক্ষেত্রে এটি এমন কিছু হবে:

from pyquery import *

html = PyQuery(url='http://www.example.com/')
trs = html('table.spad tbody tr')

for tr in trs:
  tds = tr.getchildren()
  print tds[1].text, tds[2].text

আউটপুট:

5:16 AM 9:28 PM
5:15 AM 9:30 PM
5:13 AM 9:31 PM
5:12 AM 9:33 PM
5:11 AM 9:34 PM
5:10 AM 9:35 PM
5:09 AM 9:37 PM

7

আপনি HTTP অনুরোধগুলি করতে urllib2 ব্যবহার করতে পারেন এবং তারপরে আপনার ওয়েব সামগ্রী থাকবে।

আপনি এটি এর মতো পেতে পারেন:

import urllib2
response = urllib2.urlopen('http://example.com')
html = response.read()

বিউটিফুল স্যুপ একটি অজগর এইচটিএমএল পার্সার যা স্ক্রিন স্ক্র্যাপিংয়ের জন্য ভাল বলে মনে করা হচ্ছে।

বিশেষত, এইচটিএমএল নথি পার্স করার বিষয়ে তাদের টিউটোরিয়াল এখানে

শুভকামনা!


এটি বাইটস পড়ার উপরে সর্বাধিক সেট করার ধারণা হতে পারে। প্রতিক্রিয়া.প্রেড (100000000) বা এমন কোনও কিছু যাতে আইএসওর জন্য এই URL গুলি আপনার র‌্যামটি পূরণ করে না। শুভ খনি।
অ্যান্ড্রু পেট

4

আমি স্ক্র্যাপমার্ক (url সন্ধান - py2) এবং httlib2 (চিত্র ডাউনলোড করতে - পাই 2 + 3) এর সংমিশ্রণ ব্যবহার করি । স্ক্র্যাপমার্ক.পি-তে 500 লাইন কোড রয়েছে, তবে নিয়মিত এক্সপ্রেশন ব্যবহার করা হয়, সুতরাং এটি এত দ্রুত নাও হতে পারে, পরীক্ষা করে নি।

আপনার ওয়েবসাইট স্ক্র্যাপ করার জন্য উদাহরণ:

import sys
from pprint import pprint
from scrapemark import scrape

pprint(scrape("""
    <table class="spad">
        <tbody>
            {*
                <tr>
                    <td>{{[].day}}</td>
                    <td>{{[].sunrise}}</td>
                    <td>{{[].sunset}}</td>
                    {# ... #}
                </tr>
            *}
        </tbody>
    </table>
""", url=sys.argv[1] ))

ব্যবহার:

python2 sunscraper.py http://www.example.com/

ফলাফল:

[{'day': u'1. Dez 2012', 'sunrise': u'08:18', 'sunset': u'16:10'},
 {'day': u'2. Dez 2012', 'sunrise': u'08:19', 'sunset': u'16:10'},
 {'day': u'3. Dez 2012', 'sunrise': u'08:21', 'sunset': u'16:09'},
 {'day': u'4. Dez 2012', 'sunrise': u'08:22', 'sunset': u'16:09'},
 {'day': u'5. Dez 2012', 'sunrise': u'08:23', 'sunset': u'16:08'},
 {'day': u'6. Dez 2012', 'sunrise': u'08:25', 'sunset': u'16:08'},
 {'day': u'7. Dez 2012', 'sunrise': u'08:26', 'sunset': u'16:07'}]

1

ব্যবহার করে আপনার জীবনকে আরও সহজ করুন CSS Selectors

আমি জানি আমি পার্টি করতে দেরি করে এসেছি তবে আপনার জন্য আমার একটা সুন্দর পরামর্শ আছে।

ব্যবহারটি BeautifulSoupইতিমধ্যে পরামর্শ দেওয়া হয়েছে আমি বরং CSS SelectorsHTML এর অভ্যন্তরে ডেটা স্ক্র্যাপ করতে পছন্দ করব

import urllib2
from bs4 import BeautifulSoup

main_url = "http://www.example.com"

main_page_html  = tryAgain(main_url)
main_page_soup = BeautifulSoup(main_page_html)

# Scrape all TDs from TRs inside Table
for tr in main_page_soup.select("table.class_of_table"):
   for td in tr.select("td#id"):
       print(td.text)
       # For acnhors inside TD
       print(td.select("a")[0].text)
       # Value of Href attribute
       print(td.select("a")[0]["href"])

# This is method that scrape URL and if it doesnt get scraped, waits for 20 seconds and then tries again. (I use it because my internet connection sometimes get disconnects)
def tryAgain(passed_url):
    try:
        page  = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text
        return page
    except Exception:
        while 1:
            print("Trying again the URL:")
            print(passed_url)
            try:
                page  = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text
                print("-------------------------------------")
                print("---- URL was successfully scraped ---")
                print("-------------------------------------")
                return page
            except Exception:
                time.sleep(20)
                continue 

1

আমরা যদি কোনও নির্দিষ্ট বিভাগ থেকে আইটেমের নাম পাওয়ার কথা চিন্তা করি তবে আমরা সিএসএস নির্বাচক ব্যবহার করে সেই বিভাগের শ্রেণির নাম নির্দিষ্ট করে তা করতে পারি:

import requests ; from bs4 import BeautifulSoup

soup = BeautifulSoup(requests.get('https://www.flipkart.com/').text, "lxml")
for link in soup.select('div._2kSfQ4'):
    print(link.text)

এটি আংশিক অনুসন্ধান ফলাফল:

Puma, USPA, Adidas & moreUp to 70% OffMen's Shoes
Shirts, T-Shirts...Under ₹599For Men
Nike, UCB, Adidas & moreUnder ₹999Men's Sandals, Slippers
Philips & moreStarting 99LED Bulbs & Emergency Lights

0

এখানে একটি সাধারণ ওয়েব ক্রলার, আমি বিউটিফুলসপ ব্যবহার করেছি এবং আমরা সমস্ত লিঙ্কগুলি (অ্যাঙ্করগুলি) অনুসন্ধান করব যারা ক্লাসের নাম __NFO0d। আমি ফ্লিপকার.কম ব্যবহার করেছি, এটি একটি অনলাইন খুচরা বিক্রয় কেন্দ্র।

import requests
from bs4 import BeautifulSoup
def crawl_flipkart():
    url = 'https://www.flipkart.com/'
    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, "lxml")
    for link in soup.findAll('a', {'class': '_3NFO0d'}):
        href = link.get('href')
        print(href)

crawl_flipkart()

0

পাইথনের ওয়েবে স্ক্র্যাপ করার জন্য ভাল বিকল্প রয়েছে। ফ্রেমওয়ার্ক সহ সেরাটি হ'ল স্কেরাপি । এটি নবীনদের জন্য কিছুটা জটিল হতে পারে, তাই এখানে একটি ছোট্ট সাহায্য।
১.৫ এর উপরে পাইথন ইনস্টল করুন (২.7 অবধি নিম্নের কাজ করবে)।
২. কনডায় একটি পরিবেশ তৈরি করুন (আমি এটি করেছি)।
৩. কোনও স্থানে স্কেরাপি ইনস্টল করুন এবং সেখান থেকে চালনা করুন।
৪. Scrapy shellআপনাকে কোড পরীক্ষা করার জন্য একটি ইন্টারেক্টিভ ইন্টারফেস দেবে।
৫. Scrapy startproject projectnameএকটি কাঠামো তৈরি করবে।
6. Scrapy genspider spidernameএকটি মাকড়সা তৈরি করবে। আপনি যত খুশি মাকড়সা তৈরি করতে পারেন। এটি করার সময় নিশ্চিত হয়ে নিন যে আপনি প্রকল্প ডিরেক্টরিতে আছেন।


অনুরোধ এবং সুন্দর স্যুপ ব্যবহার করা সহজ । ডকুমেন্টেশনের মধ্য দিয়ে যেতে এক ঘন্টা সময় দেওয়ার আগে এটি আপনার বেশিরভাগ সন্দেহের সমাধান করবে solve BS4 আপনি পছন্দ করতে পারেন এমন বিস্তৃত পার্সার সরবরাহ করে। ব্যবহার করুন user-agentএবং sleepসহজ চাঁচুনি করা। BS4 একটি bs.tag রিটার্ন তাই ব্যবহার করুন variable[0]। যদি জেএস চলছে, আপনি সরাসরি অনুরোধ এবং বিএস 4 ব্যবহার করে স্ক্র্যাপ করতে সক্ষম হবেন না। আপনি এপিআই লিঙ্কটি পেতে পারেন তারপরে আপনার প্রয়োজনীয় তথ্য পেতে বা চেষ্টা করার জন্য জেএসএনকে পার্স করতে পারেন selenium

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.