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.body 및 response.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