কীভাবে আইএমডিবি ওয়েবপেজ স্ক্র্যাপ করবেন?


10

ডেটা বিশ্লেষণ শেখার প্রচেষ্টার অংশ হিসাবে আমি নিজেই পাইথন ব্যবহার করে ওয়েব স্ক্র্যাপিং শিখার চেষ্টা করছি। আমি imdb ওয়েবপৃষ্ঠাটি স্ক্র্যাপ করার চেষ্টা করছি যার ইউআরএলটি নিম্নলিখিত: http://www.imdb.com/search/title?sort=num_votes,desc&start=1&title_type=fe चर&year = 1950,2012

আমি বিউটিফুলসুপ মডিউলটি ব্যবহার করছি। নিম্নলিখিতটি আমি ব্যবহার করছি কোডটি:

r = requests.get(url) # where url is the above url    
bs = BeautifulSoup(r.text)
for movie in bs.findAll('td','title'):
    title = movie.find('a').contents[0]
    genres = movie.find('span','genre').findAll('a')
    genres = [g.contents[0] for g in genres]
    runtime = movie.find('span','runtime').contents[0]
    year = movie.find('span','year_type').contents[0]
    print title, genres,runtime, rating, year

আমি নিম্নলিখিত ফলাফলগুলি পাচ্ছি:

The Shawshank Redemption [u'Crime', u'Drama'] 142 mins. (1994)

এই কোডটি ব্যবহার করে আমি শিরোনাম, জেনার, রানটাইম এবং বছর স্ক্র্যাপ করতে পারি তবে আমি imdb চলচ্চিত্রের আইডি, বা রেটিং স্ক্র্যাপ করতে পারি না। উপাদানগুলি পরিদর্শন করার পরে (ক্রোম ব্রাউজারে), আমি এমন একটি প্যাটার্ন খুঁজে পাচ্ছি না যা আমাকে উপরের মতো অনুরূপ কোড ব্যবহার করতে দেবে।

কোডের টুকরোটি লিখতে আমাকে কী কেউ সাহায্য করতে পারে যা আমাকে চলচ্চিত্রের আইডি এবং রেটিংগুলি মুছে ফেলতে দেবে?


1
আমি আপনার কোডটি কিছুটা সম্পাদনা করেছি তবে এটি ব্যর্থ হয়েছে কারণ ratingসংজ্ঞায়িত হয়নি। আপনি যদি এটি ঠিক করেন তবে আপনি যোগ করতেও পারেন from BeautifulSoup import BeautifulSoupএবং import requests। এবং কেন এছাড়াও কেন আমাদের নিজের জন্য এটি করতে হবে তা দেখাবে url="http://etc"না?
স্পেসডম্যান

1
কেবলমাত্র ক্ষেত্রে: opendata.stackexchange.com/questions/1073/…
আন্তন তারাসেনকো

উত্তর:


12

স্ক্র্যাপিংয়ের পরিবর্তে, আপনি সরাসরি এখানে ডেটা পাওয়ার চেষ্টা করতে পারেন: http://www.imdb.com/interfaces । দেখে মনে হচ্ছে চলচ্চিত্র, অভিনেতা ইত্যাদির জন্য এফটিপির মাধ্যমে তাদের কাছে ডেটা উপলব্ধ রয়েছে looks


2
@ গ্রেড থ্যাচার, লিঙ্কটির জন্য ধন্যবাদ। এই প্রকল্পটি ওয়েব স্ক্র্যাপিংয়ের উপর শেখার প্রচেষ্টার অংশ এবং তাই এই সমস্ত ঝামেলা। - :)
ব্যবহারকারী 62198

8

আমি একটি সমাধান বের করতে সক্ষম হয়েছি। আমি কেবল পোস্ট করার কথা ভেবেছিলাম এটি কারওর পক্ষে বা কারও কাছে আলাদা কিছু প্রস্তাব দিতে চাইলে।

bs = BeautifulSoup(r.text)
for movie in bs.findAll('td','title'):
    title = movie.find('a').contents[0]
    genres = movie.find('span','genre').findAll('a')
    genres = [g.contents[0] for g in genres]
    runtime = movie.find('span','runtime').contents[0]
    rating = movie.find('span','value').contents[0]
    year = movie.find('span','year_type').contents[0]
    imdbID = movie.find('span','rating-cancel').a['href'].split('/')[2]
    print title, genres,runtime, rating, year, imdbID

আউটপুটটি দেখতে এটির মতো দেখাচ্ছে:

The Shawshank Redemption [u'Crime', u'Drama'] 142 mins. 9.3 (1994) tt0111161

2

আপনি শ্রেণি = "রেটিং রেটিং-তালিকা" দিয়ে ডিভ থেকে সমস্ত কিছু পেতে পারেন

আপনাকে যা করতে হবে তা হ'ল বৈশিষ্ট্য আইডিটি পুনরুদ্ধার করতে হবে: [id = "tt1345836 | imdb | 8.5 | 8.5 | পরামর্শদাতা]] যখন আপনার এই বিষয়বস্তু রয়েছে, আপনি এই স্ট্রিংটি '|' দ্বারা বিভক্ত করুন এবং আপনি পাবেন: ১ প্যারামিটার: সিনেমা আইডি ৩. প্যারামিটার: মুভি স্কোর


ধন্যবাদ। @ ম্যাটিক ডিবি ... আমি আইডিটি পেতে সক্ষম হয়েছি .. নীচে আমার সমাধানটি হল
ইউজার 62198

2

কিছুটা সাধারণ প্রতিক্রিয়া হিসাবে, আমি মনে করি আপনি নিজের আউটপুট ফর্ম্যাটটি উন্নত করতে ভাল করতে পারেন। ফর্ম্যাটটিতে যে সমস্যাটি দাঁড়িয়ে আছে তা প্রোগ্রামিয়ালি ডেটা পাওয়ার কোনও স্বচ্ছ উপায় নেই। পরিবর্তে চেষ্টা বিবেচনা করুন:

print "\t".join([title, genres,runtime, rating, year])

একটি ট্যাব বিস্মৃত ফাইলটি সম্পর্কে দুর্দান্ত জিনিসটি হ'ল আপনি যদি স্কেলিং শেষ করেন তবে এটি সহজেই ইমপাল (বা আরও ছোট আকারের, সাধারণ মাইএসকিএল টেবিল) এর মতো কিছুতে পড়তে পারে। অতিরিক্তভাবে, আপনি তারপরে অজগরটির ডেটাগুলিতে প্রগ্রেমেটিকভাবে পড়তে পারেন:

 line.split("\t")

দ্বিতীয় বিট পরামর্শ, আমি আপনার প্রাথমিক স্ক্র্যাপের জন্য আপনার যা প্রয়োজন মনে করেন তার চেয়ে আরও বেশি তথ্য পাওয়ার পরামর্শ দেব। ডিস্কের স্থান প্রক্রিয়াজাতকরণের চেয়ে সস্তা, সুতরাং যতবার আপনি আপনার বিশ্লেষককে প্রসারিত করবেন ততবার স্ক্র্যাপারটিকে পুনরায় চালানো মজাদার হবে না।

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