Scrapy-아이템 추출

기술

웹 페이지에서 데이터를 추출하기 위해 Scrapy는 XPath 및 CSS 표현식을 기반으로하는 선택기라는 기술을 사용합니다 . 다음은 XPath 표현식의 몇 가지 예입니다.

  • /html/head/title − HTML 문서의 <head> 요소 안에있는 <title> 요소를 선택합니다.

  • /html/head/title/text() − 동일한 <title> 요소 내의 텍스트를 선택합니다.

  • //td − 이것은 <td>의 모든 요소를 ​​선택합니다.

  • //div[@class = "slice"]− 이것은 속성 클래스 = "슬라이스"를 포함하는 div 에서 모든 요소를 ​​선택합니다.

선택자는 다음 표와 같이 네 가지 기본 방법이 있습니다.

Sr. 아니요 방법 및 설명
1

extract()

선택한 데이터와 함께 유니 코드 문자열을 반환합니다.

2

re()

정규식이 인수로 주어 졌을 때 추출 된 유니 코드 문자열 목록을 반환합니다.

xpath()

인수로 제공된 xpath 표현식에 의해 선택된 노드를 나타내는 선택기 목록을 리턴합니다.

4

css()

인수로 주어진 CSS 표현식에 의해 선택된 노드를 나타내는 선택기 목록을 반환합니다.

셸에서 선택기 사용

내장 Scrapy 셸을 사용하여 선택기를 시연하려면 시스템에 IPython이 설치되어 있어야합니다. 여기서 중요한 것은 Scrapy를 실행하는 동안 URL이 따옴표 안에 포함되어야한다는 것입니다. 그렇지 않으면 '&'문자가있는 URL이 작동하지 않습니다. 프로젝트의 최상위 디렉토리에서 다음 명령을 사용하여 셸을 시작할 수 있습니다.

scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"

셸은 다음과 같습니다.

[ ... Scrapy log here ... ]

2014-01-23 17:11:42-0400 [scrapy] DEBUG: Crawled (200) 
<GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>(referer: None)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x3636b50>
[s]   item       {}
[s]   request    <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>
[s]   response   <200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>
[s]   settings   <scrapy.settings.Settings object at 0x3fadc50>
[s]   spider     <Spider 'default' at 0x3cebf50>
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser

In [1]:

셸이로드되면 각각 response.bodyresponse.header 를 사용하여 본문 또는 헤더에 액세스 할 수 있습니다 . 마찬가지로 response.selector.xpath () 또는 response.selector.css ()를 사용하여 응답 에 대한 쿼리를 실행할 수 있습니다 .

예를 들어-

In [1]: response.xpath('//title')
Out[1]: [<Selector xpath = '//title' data = u'<title>My Book - Scrapy'>]

In [2]: response.xpath('//title').extract()
Out[2]: [u'<title>My Book - Scrapy: Index: Chapters</title>']

In [3]: response.xpath('//title/text()')
Out[3]: [<Selector xpath = '//title/text()' data = u'My Book - Scrapy: Index:'>]

In [4]: response.xpath('//title/text()').extract()
Out[4]: [u'My Book - Scrapy: Index: Chapters']

In [5]: response.xpath('//title/text()').re('(\w+):')
Out[5]: [u'Scrapy', u'Index', u'Chapters']

데이터 추출

일반적인 HTML 사이트에서 데이터를 추출하려면 사이트의 소스 코드를 검사하여 XPath를 가져와야합니다. 검사 후 데이터가ul꼬리표. 내 요소 선택li 꼬리표.

다음 코드 줄은 다양한 유형의 데이터 추출을 보여줍니다.

li 태그 내에서 데이터를 선택하려면 −

response.xpath('//ul/li')

설명 선택-

response.xpath('//ul/li/text()').extract()

사이트 제목 선택-

response.xpath('//ul/li/a/text()').extract()

사이트 링크 선택-

response.xpath('//ul/li/a/@href').extract()

다음 코드는 위 추출기의 사용을 보여줍니다-

import scrapy

class MyprojectSpider(scrapy.Spider):
   name = "project"
   allowed_domains = ["dmoz.org"]
   
   start_urls = [
      "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
      "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
   ]
   def parse(self, response):
      for sel in response.xpath('//ul/li'):
         title = sel.xpath('a/text()').extract()
         link = sel.xpath('a/@href').extract()
         desc = sel.xpath('text()').extract()
         print title, link, desc