আমি কোনও ওয়েবসাইট থেকে প্রতিদিন সূর্যোদয় / সূর্যাস্তের সময়গুলি গ্রহণ করতে চাই। পাইথনের সাহায্যে ওয়েব সামগ্রী স্ক্র্যাপ করা সম্ভব? মডিউলগুলি কি ব্যবহৃত হয়? কোন টিউটোরিয়াল উপলব্ধ আছে?
আমি কোনও ওয়েবসাইট থেকে প্রতিদিন সূর্যোদয় / সূর্যাস্তের সময়গুলি গ্রহণ করতে চাই। পাইথনের সাহায্যে ওয়েব সামগ্রী স্ক্র্যাপ করা সম্ভব? মডিউলগুলি কি ব্যবহৃত হয়? কোন টিউটোরিয়াল উপলব্ধ আছে?
উত্তর:
উজ্জ্বল বিউটিফুলসপ লাইব্রেরির সাথে মিলিয়ে 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
soup = BeautifulSoup(requests.get('http://example.com').text)
backticks
কোডের চারপাশে ভুলে গিয়েছিলাম এবং এটি এটিকে একটি লিঙ্কে রূপান্তরিত করে। ধন্যবাদ!
আমি সত্যিই থেরাপির পরামর্শ দিই।
মুছে দেওয়া উত্তর থেকে উদ্ধৃতি:
- স্ক্রেরি ক্রলিং যান্ত্রিকীকরণের চেয়ে দ্রুততম কারণ অ্যাসিনক্রোনাস অপারেশনগুলি (ট্যুইস্টেড শীর্ষে) ব্যবহার করে।
- LibxML2 এর শীর্ষে পার্সিং (এক্স) এইচটিএমএল জন্য স্কেরাপির আরও ভাল এবং দ্রুত সমর্থন রয়েছে।
- স্কেরাপি সম্পূর্ণ ইউনিকোড, পুনর্নির্দেশগুলি, জিজেপড প্রতিক্রিয়াগুলি, বিজোড় এনকোডিংস, ইন্টিগ্রেটেড এইচপি ক্যাশে ইত্যাদি সহ একটি পরিপক্ক কাঠামো is
- একবার আপনি স্কেরাপিতে আসার পরে, আপনি 5 মিনিটেরও কম সময়ে একটি মাকড়সা লিখতে পারেন যা চিত্রগুলি ডাউনলোড করে, থাম্বনেইল তৈরি করে এবং এক্সট্রাক্ট করা ডেটা সরাসরি সিএসভি বা জেসসনে রফতানি করে।
আমি আমার ওয়েব স্ক্র্যাপিংয়ের কাজগুলি থেকে এই বিট-বালতি লাইব্রেরিতে একসাথে সংগ্রহ করেছি ।
আপনার ক্ষেত্রে উদাহরণ স্ক্রিপ্ট:
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
আমি দৃ 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
আপনি HTTP অনুরোধগুলি করতে urllib2 ব্যবহার করতে পারেন এবং তারপরে আপনার ওয়েব সামগ্রী থাকবে।
আপনি এটি এর মতো পেতে পারেন:
import urllib2
response = urllib2.urlopen('http://example.com')
html = response.read()
বিউটিফুল স্যুপ একটি অজগর এইচটিএমএল পার্সার যা স্ক্রিন স্ক্র্যাপিংয়ের জন্য ভাল বলে মনে করা হচ্ছে।
বিশেষত, এইচটিএমএল নথি পার্স করার বিষয়ে তাদের টিউটোরিয়াল এখানে ।
শুভকামনা!
আমি স্ক্র্যাপমার্ক (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'}]
ব্যবহার করে আপনার জীবনকে আরও সহজ করুন CSS Selectors
আমি জানি আমি পার্টি করতে দেরি করে এসেছি তবে আপনার জন্য আমার একটা সুন্দর পরামর্শ আছে।
ব্যবহারটি BeautifulSoup
ইতিমধ্যে পরামর্শ দেওয়া হয়েছে আমি বরং CSS Selectors
HTML এর অভ্যন্তরে ডেটা স্ক্র্যাপ করতে পছন্দ করব
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
আমরা যদি কোনও নির্দিষ্ট বিভাগ থেকে আইটেমের নাম পাওয়ার কথা চিন্তা করি তবে আমরা সিএসএস নির্বাচক ব্যবহার করে সেই বিভাগের শ্রেণির নাম নির্দিষ্ট করে তা করতে পারি:
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
এখানে একটি সাধারণ ওয়েব ক্রলার, আমি বিউটিফুলসপ ব্যবহার করেছি এবং আমরা সমস্ত লিঙ্কগুলি (অ্যাঙ্করগুলি) অনুসন্ধান করব যারা ক্লাসের নাম __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()
পাইথনের ওয়েবে স্ক্র্যাপ করার জন্য ভাল বিকল্প রয়েছে। ফ্রেমওয়ার্ক সহ সেরাটি হ'ল স্কেরাপি । এটি নবীনদের জন্য কিছুটা জটিল হতে পারে, তাই এখানে একটি ছোট্ট সাহায্য।
১.৫ এর উপরে পাইথন ইনস্টল করুন (২.7 অবধি নিম্নের কাজ করবে)।
২. কনডায় একটি পরিবেশ তৈরি করুন (আমি এটি করেছি)।
৩. কোনও স্থানে স্কেরাপি ইনস্টল করুন এবং সেখান থেকে চালনা করুন।
৪. Scrapy shell
আপনাকে কোড পরীক্ষা করার জন্য একটি ইন্টারেক্টিভ ইন্টারফেস দেবে।
৫. Scrapy startproject projectname
একটি কাঠামো তৈরি করবে।
6. Scrapy genspider spidername
একটি মাকড়সা তৈরি করবে। আপনি যত খুশি মাকড়সা তৈরি করতে পারেন। এটি করার সময় নিশ্চিত হয়ে নিন যে আপনি প্রকল্প ডিরেক্টরিতে আছেন।
অনুরোধ এবং সুন্দর স্যুপ ব্যবহার করা সহজ । ডকুমেন্টেশনের মধ্য দিয়ে যেতে এক ঘন্টা সময় দেওয়ার আগে এটি আপনার বেশিরভাগ সন্দেহের সমাধান করবে solve BS4 আপনি পছন্দ করতে পারেন এমন বিস্তৃত পার্সার সরবরাহ করে। ব্যবহার করুন user-agent
এবং sleep
সহজ চাঁচুনি করা। BS4 একটি bs.tag রিটার্ন তাই ব্যবহার করুন variable[0]
। যদি জেএস চলছে, আপনি সরাসরি অনুরোধ এবং বিএস 4 ব্যবহার করে স্ক্র্যাপ করতে সক্ষম হবেন না। আপনি এপিআই লিঙ্কটি পেতে পারেন তারপরে আপনার প্রয়োজনীয় তথ্য পেতে বা চেষ্টা করার জন্য জেএসএনকে পার্স করতে পারেন selenium
।