मैं वेब साइट से दैनिक सूर्योदय / सूर्यास्त के समय को हड़पना चाहता हूं। क्या पायथन के साथ वेब सामग्री को परिमार्जन करना संभव है? मॉड्यूल क्या उपयोग किया जाता है? क्या कोई ट्यूटोरियल उपलब्ध है?
मैं वेब साइट से दैनिक सूर्योदय / सूर्यास्त के समय को हड़पना चाहता हूं। क्या पायथन के साथ वेब सामग्री को परिमार्जन करना संभव है? मॉड्यूल क्या उपयोग किया जाता है? क्या कोई ट्यूटोरियल उपलब्ध है?
जवाबों:
शानदार BeautifulSoup लाइब्रेरी के संयोजन में 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 के शीर्ष पर पार्सिंग (x) html के लिए बेहतर और तेज़ समर्थन प्राप्त है।
- स्क्रेपी पूर्ण यूनिकोड के साथ एक परिपक्व ढांचा है, पुनर्निर्देशन, gzipped प्रतिक्रियाओं, विषम एनकोडिंग, एकीकृत कैश कैश आदि को संभालता है।
- एक बार जब आप स्क्रेपी में होते हैं, तो आप 5 मिनट से भी कम समय में एक स्पाइडर लिख सकते हैं जो छवियों को डाउनलोड करता है, थंबनेल बनाता है और निकाले गए डेटा को सीधे csv या json में निर्यात करता है।
मैंने इस बिट-बकेट लाइब्रेरी में अपने वेब स्क्रैपिंग कार्य से स्क्रिप्ट एकत्र की ।
आपके मामले के लिए उदाहरण स्क्रिप्ट:
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
मैं दृढ़ता से मवाद की जाँच करने का सुझाव दूंगा । इसमें jquery-like (aka css-like) सिंटैक्स का उपयोग किया गया है जो उस पृष्ठभूमि से आने वाले लोगों के लिए चीजों को वास्तव में आसान बनाता है।
आपके मामले के लिए, यह कुछ इस तरह होगा:
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()
सुंदर सूप एक अजगर HTML पार्सर है जो स्क्रीन स्क्रैपिंग के लिए अच्छा माना जाता है।
विशेष रूप से, यहाँ एक HTML दस्तावेज़ पार्स करने पर उनका ट्यूटोरियल है।
सौभाग्य!
मैं स्क्रैपमार्क के एक संयोजन का उपयोग करता हूं (urls - py2 खोज रहा है) और CANlib2 (छवियों को डाउनलोड करना - py2 + 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
यहाँ एक साधारण वेब क्रॉलर है, मैंने ब्यूटीफुल का उपयोग किया है और हम उन सभी लिंक्स (एंकर) की खोज करेंगे जिनका वर्ग नाम _3NFO0d है। मैंने Flipkar.com का उपयोग किया, यह एक ऑनलाइन रिटेलिंग स्टोर है।
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()
अजगर के पास वेब को खंगालने के लिए अच्छे विकल्प हैं। एक रूपरेखा के साथ सबसे अच्छा एक है scrapy । यह शुरुआती लोगों के लिए थोड़ा मुश्किल हो सकता है, इसलिए यहां थोड़ी मदद है।
1. 3.5 से ऊपर अजगर स्थापित करें (2.7 तक कम लोग काम करेंगे)।
2. कॉन्डा में एक वातावरण बनाएं (मैंने ऐसा किया था)।
3. किसी स्थान पर स्क्रैपी स्थापित करें और वहां से चलाएं।
4. Scrapy shell
आपको कोड का परीक्षण करने के लिए एक इंटरेक्टिव इंटरफ़ेस देगा।
5. Scrapy startproject projectname
एक ढांचा तैयार करेगा।
6. Scrapy genspider spidername
एक मकड़ी पैदा करेगा। आप जितने चाहें उतने मकड़ी बना सकते हैं। यह सुनिश्चित करते हुए कि आप प्रोजेक्ट डायरेक्टरी के अंदर हैं।
अनुरोध और सुंदर सूप का उपयोग करना आसान है । दस्तावेज़ीकरण के माध्यम से जाने के लिए एक घंटे का समय देने से पहले, यह आपके अधिकांश संदेहों को हल कर देगा। BS4 आपके द्वारा चुने जा सकने वाले पार्सरों की विस्तृत श्रृंखला पेश करता है। स्क्रैपिंग को आसान बनाने के लिए उपयोग user-agent
और उपयोग करें sleep
। BS4 एक bs.tag का उपयोग करता है variable[0]
। अगर कोई js चल रहा है, तो आप सीधे अनुरोधों और bs4 का उपयोग कर सकते हैं। आप एपीआई लिंक प्राप्त कर सकते हैं, फिर JSON को पार्स कर सकते हैं ताकि आपको आवश्यक जानकारी या कोशिश मिल सके selenium
।