Paano Bumuo ng isang Pangunahing Web Crawler upang Kumuha ng Impormasyon Mula sa isang Website

Paano Bumuo ng isang Pangunahing Web Crawler upang Kumuha ng Impormasyon Mula sa isang Website

Ang mga program na nagbabasa ng impormasyon mula sa mga website, o web crawler, ay mayroong lahat ng mga uri ng mga kapaki-pakinabang na application. Maaari kang mag-scrape para sa impormasyon ng stock, mga marka sa palakasan, teksto mula sa isang Twitter account, o hilahin ang mga presyo mula sa mga shopping website.





Ang pagsulat ng mga programang ito sa pag-crawl sa web ay mas madali kaysa sa naisip mo. Ang Python ay may mahusay na silid-aklatan para sa pagsusulat ng mga script na kumukuha ng impormasyon mula sa mga website. Tingnan natin kung paano lumikha ng isang web crawler gamit ang Scrapy.





Pag-install ng Scrapy

Scrapy ay isang silid-aklatan ng Python na nilikha upang mag-scrape ng web at bumuo ng mga web crawler. Ito ay mabilis, simple, at maaaring mag-navigate sa maraming mga web page nang walang labis na pagsisikap.





Magagamit ang scrapy sa pamamagitan ng pip Installs Python (PIP) library, narito ang isang pag-refresh kung paano i-install ang PIP sa Windows, Mac, at Linux .

Ginagamit ang paggamit ng isang Python Virtual na Kapaligiran sapagkat papayagan kang mag-install ng Scrapy sa isang virtual na direktoryo na nag-iiwan ng mga file ng iyong system. Inirekumenda ng dokumentasyon ni Scrapy na gawin ito upang makuha ang pinakamahusay na mga resulta.



Lumikha ng isang direktoryo at simulan ang isang virtual na kapaligiran.

kung paano paikutin ang video windows media player
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Maaari mo na ngayong mai-install ang Scrapy sa direktoryong iyon gamit ang isang PIP command.





pip install scrapy

Isang mabilis na pagsusuri upang matiyak na na-install nang maayos ang Scrapy

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Paano Bumuo ng isang Web Crawler

Ngayon na handa na ang kapaligiran maaari mong simulan ang pagbuo ng web crawler. I-scrape natin ang ilang impormasyon mula sa isang pahina ng Wikipedia sa mga baterya: https://en.wikipedia.org/wiki/Battery_(electricity) .





Ang unang hakbang upang sumulat ng isang crawler ay tumutukoy sa isang klase ng Python na umaabot mula Scrapy.Spider . Binibigyan ka nito ng access sa lahat ng mga pag-andar at tampok sa Scrapy. Tawagin natin ang klase na ito gagamba1 .

Ang isang klase ng gagamba ay nangangailangan ng ilang mga piraso ng impormasyon:

  • sa pangalan para sa pagkilala sa gagamba
  • sa start_urls variable na naglalaman ng isang listahan ng mga URL upang mag-crawl mula (ang Wikipedia URL ay magiging halimbawa sa tutorial na ito)
  • sa parse () pamamaraan na ginagamit upang maproseso ang webpage upang kumuha ng impormasyon
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Isang mabilis na pagsubok upang matiyak na tumatakbo nang maayos ang lahat.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Patayin ang Pag-log

Ang Pagpapatakbo ng Scrapy sa klase na ito ay naglilimbag ng impormasyon sa pag-log na hindi makakatulong sa iyo ngayon. Gawin nating simple sa pamamagitan ng pag-aalis ng labis na impormasyon sa pag-log. Gumamit ng a babala pahayag sa pamamagitan ng pagdaragdag ng code sa simula ng file.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Ngayon kapag pinatakbo mo muli ang script, ang impormasyon ng pag-log ay hindi mai-print.

Paggamit ng Chrome Inspector

Ang lahat sa isang web page ay nakaimbak sa mga elemento ng HTML. Ang mga elemento ay nakaayos sa Document Object Model (DOM). Ang pag-unawa sa DOM ay kritikal upang masulit ang iyong web crawler. Ang isang web crawler ay naghahanap sa lahat ng mga elemento ng HTML sa isang pahina upang makahanap ng impormasyon, kaya't alam kung paano nakaayos ang mga ito ay mahalaga.

Ang Google Chrome ay may mga tool na makakatulong sa iyo na makahanap ng mga elemento ng HTML nang mas mabilis. Maaari mong hanapin ang HTML para sa anumang elemento na nakikita mo sa web page gamit ang inspector.

  • Mag-navigate sa isang pahina sa Chrome
  • Ilagay ang mouse sa elemento na nais mong tingnan
  • Mag-right click at pumili Siyasatin mula sa menu

Ang mga hakbang na ito ay magbubukas ng developer console kasama ang Mga elemento napili ang tab. Sa ilalim ng console, makikita mo ang isang puno ng mga elemento. Ang punong ito ay kung paano ka makakakuha ng impormasyon para sa iyong script.

Kinukuha ang Pamagat

Kunin natin ang script na gumawa ng ilang gawain para sa amin; Isang simpleng pag-crawl upang makuha ang teksto ng pamagat ng web page.

Simulan ang script sa pamamagitan ng pagdaragdag ng ilang code sa parse () pamamaraan na kumukuha ng pamagat.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

Ang tugon Sinusuportahan ng argumento ang isang pamamaraang tinawag CSS () na pipili ng mga elemento mula sa pahina gamit ang lokasyong iyong ibinibigay.

Sa halimbawang ito, ang elemento ay h1.firstHeading . Nagdadagdag

::text

sa script ay kung ano ang nagbibigay sa iyo ng nilalaman ng teksto ng elemento. Panghuli, ang kunin () ibinalik ng pamamaraan ang napiling elemento.

Ang pagpapatakbo ng script na ito sa Scrapy ay naglilimbag ng pamagat sa form ng teksto.

[u'Battery (electricity)']

Paghahanap ng Paglalarawan

Ngayon na na-scrape namin ang teksto ng pamagat gumawa tayo ng higit pa sa script. Mahahanap ng crawler ang unang talata pagkatapos ng pamagat at kunin ang impormasyong ito.

Narito ang elemento ng elemento sa Chrome Developer Console:

hindi nagpapakita ng panlabas na hard drive sa pamamahala ng disk
div#mw-content-text>div>p

Ang kanang arrow (>) ay nagpapahiwatig ng ugnayan ng magulang at anak sa pagitan ng mga elemento.

Ibabalik ng lokasyon na ito ang lahat ng p naitugma ang mga elemento, na kinabibilangan ng buong paglalarawan. Upang makuha ang una p elemento na maaari mong isulat ang code na ito:

response.css('div#mw-content-text>div>p')[0]

Tulad ng pamagat, nagdagdag ka ng CSS extractor

::text

upang makuha ang nilalaman ng teksto ng elemento.

response.css('div#mw-content-text>div>p')[0].css('::text')

Gumagamit ang pangwakas na ekspresyon kunin () upang ibalik ang listahan. Maaari mong gamitin ang Python sumali () pagpapaandar upang sumali sa listahan kapag nakumpleto na ang lahat ng pag-crawl.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Ang resulta ay ang unang talata ng teksto!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Pagkolekta ng Data ng JSON

Maaaring makuha ng scrapy ang impormasyon sa form ng teksto, na kapaki-pakinabang. Hinahayaan ka rin ng Scrapy na tingnan ang data na JavaScript Object Notation (JSON). Ang JSON ay isang maayos na paraan upang ayusin ang impormasyon at malawakang ginagamit sa pagbuo ng web. Si JSON ay gumagana nang maayos sa Python din.

Kapag kailangan mong mangolekta ng data bilang JSON, maaari mong gamitin ang ani pahayag na binuo sa Scrapy.

Narito ang isang bagong bersyon ng script gamit ang isang pahayag ng ani. Sa halip na makuha ang unang elemento ng p sa format ng teksto, kukunin nito ang lahat ng mga elemento ng p at ayusin ito sa format na JSON.

kung paano baguhin ang liwanag windows 10
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Maaari mo nang patakbuhin ang spider sa pamamagitan ng pagtukoy ng isang output na JSON file:

scrapy runspider spider3.py -o joe.json

I-print na ngayon ng script ang lahat ng mga elemento ng p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Pag-scrape ng Maramihang Mga Sangkap

Sa ngayon ang web crawler ay na-scrap ang pamagat at isang uri ng isang elemento mula sa pahina. Maaari ding makuha ng scrapy ang impormasyon mula sa iba't ibang uri ng mga elemento sa isang script.

Kunin natin ang nangungunang mga hit sa IMDb Box Office para sa isang katapusan ng linggo. Ang impormasyong ito ay nakuha mula sa http://www.imdb.com/chart/boxoffice , sa isang talahanayan na may mga hilera para sa bawat sukatan.

Ang parse () Ang pamamaraan ay maaaring kumuha ng higit sa isang patlang mula sa hilera. Gamit ang Mga Tool para sa Developer ng Chrome maaari mong makita ang mga sangkap na nakapugad sa loob ng talahanayan.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

Ang imahe ang tumutukoy ay tumutukoy nito img ay isang inapo ng td.posterColumn . Upang makuha ang tamang katangian, gamitin ang expression ::attr(src).

Ang pagpapatakbo ng gagamba ay nagbabalik kay JSON:

[
{'gross': '.8M', 'weeks': '1', 'weekend': '.8M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Justice League'},
{'gross': '.5M', 'weeks': '1', 'weekend': '.5M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg', 'title': 'Wonder'},
{'gross': '7.3M', 'weeks': '3', 'weekend': '.7M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Thor: Ragnarok'},
...
]

Higit pang mga Web Scraper at Bot

Ang Scrapy ay isang detalyadong aklatan na magagawa ang halos anumang uri ng pag-crawl sa web na hiniling mo rito. Pagdating sa paghahanap ng impormasyon sa mga elemento ng HTML, na sinamahan ng suporta ng Python, mahirap talunin. Kung nagtatayo ka man ng isang web crawler o pag-aaral tungkol sa mga pangunahing kaalaman sa web scraping ang tanging limitasyon ay kung gaano mo kagustuhang malaman.

Kung naghahanap ka para sa higit pang mga paraan upang makabuo ng mga crawler o bot maaari mong subukan bumuo ng mga bot sa Twitter at Instagram gamit ang Python . Ang Python ay maaaring bumuo ng ilang mga kamangha-manghang bagay sa pag-unlad ng web, kaya't sulit na lampasan ang mga web crawler kapag sinisiyasat ang wikang ito.

Magbahagi Magbahagi Mag-tweet Email 15 Mga Utos ng Windows Command Prompt (CMD) na Dapat Mong Malaman

Ang command prompt ay isang malakas pa ring tool sa Windows. Narito ang pinaka kapaki-pakinabang na utos ng CMD na kailangang malaman ng bawat gumagamit ng Windows.

Basahin Susunod
Mga Kaugnay na Paksa
  • Programming
  • Mga Tool sa Webmaster
  • Programming
  • Sawa
  • Mga Tutorial sa Coding
  • Mga Crawler sa Web
Tungkol sa May-akda Anthony Grant(40 na Artikulo Nai-publish)

Si Anthony Grant ay isang freelance na manunulat na sumasaklaw sa Programming at Software. Isa siyang pangunahing agham sa Computer Science sa pag-program, Excel, software, at teknolohiya.

Higit pa Mula kay Anthony Grant

Mag-subscribe sa aming newsletter

Sumali sa aming newsletter para sa mga tip sa tech, pagsusuri, libreng ebook, at eksklusibong deal!

Mag-click dito upang mag-subscribe