이전 글의 댓글을 보면 많은 아동용 신발이 크롤러의 소스코드에 더 주목하고 있는 것 같습니다. 이 모든 기사에는 Python을 사용하여 비디오 다운로드 리소스를 캡처하는 간단한 웹 크롤러를 작성하는 방법에 대한 자세한 기록이 있습니다. 올해 크롤러와의 첫 접촉이 모든 사람에게 도움이 되기를 바랍니다. 5월에 블로그 검색 엔진을 작성했는데 사용된 크롤러는 꽤 똑똑했습니다. 최소한 Here Comes the Movie! 웹사이트에서 사용하는 크롤러보다 훨씬 뛰어났습니다.
Python으로 크롤러 작성 주제로 돌아갑니다.Python은 제가 사용하는 주요 스크립팅 언어였습니다. Python의 언어는 간단하고 유연하며 표준 라이브러리는 강력하며 계산기, 텍스트 인코딩 변환, 이미지 처리, 일괄 다운로드, 일괄 텍스트 처리 등으로 사용할 수 있습니다. 간단히 말해서, 나는 그것을 매우 좋아하고, 더 많이 사용할수록 더 잘 알게 되며, 그런 유용한 도구에 대해 대부분의 사람들에게 말하지 않습니다. . .
강력한 문자열 처리 능력과 urllib2, cookielib, re, threading 등의 모듈이 존재하기 때문에 Python으로 크롤러를 작성하기 쉽습니다. 얼마나 간단할 수 있습니까? 나는 당시 동급생에게 영화 Here Comes를 편집하는 데 사용한 여러 크롤러 및 분산 스크립트에 대한 스크립트 코드의 총 라인 수가 1,000을 초과하지 않았으며 영화 Here Comes 웹 사이트에는 약 150줄의 코드. 크롤러의 코드는 다른 64비트 Black Apple에 있으므로 나열하지 않겠습니다. VPS에는 웹사이트의 코드만 나열하겠습니다. tornadoweb 프레임워크로 작성되었습니다.
[xiaoxia@307232 movie_site]$ wc -l *.py template/* 156 msite.py 92 template/base.html 79 template/category.html 94 template/id.html 47 template/index.html 77 template/search.html
Piratebay의 최신 비디오 다운로드 리소스를 예로 들어보세요. URL은
http://piratebay.se/browse/200
이 웹페이지에는 광고가 많기 때문에 주요 콘텐츠만 게시하겠습니다.
파이썬 크롤러의 경우 이 페이지의 소스 코드를 다운로드하세요. 코드 한 줄이면 충분합니다. 여기서는 urllib2 라이브러리가 사용됩니다.
>>> import urllib2 >>> html = urllib2.urlopen('http://某piratebay.se/browse/200').read() >>> print 'size is', len(html) size is 52977
물론, os 모듈의 시스템 기능을 사용하여 wget 명령을 호출하여 웹 콘텐츠를 다운로드할 수도 있습니다. 이는 wget 또는 컬 도구를 마스터한 학생들에게 매우 편리합니다.
Firebug를 이용하여 웹페이지의 구조를 관찰해 보면 본문의 html이 테이블임을 알 수 있습니다. 각 리소스는 tr 태그입니다.
각 리소스에 대해 추출해야 하는 정보는 다음과 같습니다.
1. 비디오 카테고리
2. 리소스 링크4. 업로드 시간
그게 전부입니다. 필요하다면 늘릴 수 있습니다.
먼저 tr 태그의 코드를 추출하여 살펴보세요.
<tr> <td class="vertTh"> <center> <a href="/browse/200" title="此目录中更多">视频</a><br /> (<a href="/browse/205" title="此目录中更多">电视</a>) </center> </td> <td> <p class="detName"> <a href="/torrent/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264" class="detLink" title="细节 The Walking Dead Season 3 Episodes 1-3 HDTV-x264">The Walking Dead Season 3 Episodes 1-3 HDTV-x264</a> </p> <a href="magnet:?xt=urn:btih:4f63d58e51c1a4a997c6f099b2b529bdbba72741&dn=The+Walking+Dead+Season+3+Episodes+1-3+HDTV-x264&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80" title="Download this torrent using magnet"><img src="//static.某piratebay.se/img/icon-magnet.gif" alt="Magnet link" /></a> <a href="//torrents.某piratebay.se/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264.7782194.TPB.torrent" title="下载种子"><img src="//static.某piratebay.se/img/dl.gif" class="dl" alt="下载" /></a><img src="//static.某piratebay.se/img/11x11p.png" / alt="비디오를 캡처하기 위해 Python으로 간단한 웹 크롤러를 작성합니다." ><img src="//static.某piratebay.se/img/11x11p.png" / alt="비디오를 캡처하기 위해 Python으로 간단한 웹 크롤러를 작성합니다." > <font class="detDesc">已上传 <b>3 分钟前</b>, 大小 2 GiB, 上传者 <a class="detDesc" href="/user/paridha/" title="浏览 paridha">paridha</a></font> </td> <td align="right">0</td> <td align="right">0</td> </tr>
다음은 정규식을 사용하여 HTML 코드의 내용을 추출합니다. 정규식에 대해 모르는 학생은 http://docs.python.org/2/library/re.html로 이동하여 자세한 내용을 알아볼 수 있습니다.
HTML이나 DOM 트리를 구문 분석하기 위해 다른 도구 대신 정규식을 사용해야 하는 이유가 있습니다. 이전에 BeautifulSoup3를 사용하여 콘텐츠를 추출하려고 시도했지만 나중에 보니 1초에 100개의 콘텐츠를 처리하는 것이 이미 내 컴퓨터의 한계였습니다. . . 하지만 정규식을 변경하고 컴파일 후 콘텐츠를 처리하면 속도가 직접적으로 저하됩니다!
이렇게 많은 내용을 추출하려면 정규식을 어떻게 작성해야 하나요?
제 경험에 따르면
".*?" 또는 ".+?"가 매우 유용합니다.그러나 실제로 사용해보면 알 수 있는 몇 가지 사소한 문제에도 주의해야 합니다.
위 tr 태그 코드의 경우 먼저 내 표현식의 기호를
콘텐츠를 표현하는 것은 물론 필수 콘텐츠를 놓치지 않는 한 다른 무엇이든 가능합니다. 그런 다음 비디오 분류를 얻기 위해 일치시키려는 콘텐츠는 다음과 같습니다.
(TV)
그런 다음 리소스 링크인
그리고 다른 리소스 정보로,
font class="detDesc">업로드 3분 전, 크기 2GiB, 업로더
최종 경기
완료!
물론, 최종 일치를 정규식으로 표현할 필요는 없습니다. 시작 위치가 정확하면 나중에 정보를 얻는 위치도 정확합니다. 정규식에 익숙한 친구라면 어떻게 작성하는지 알 수도 있습니다. 제가 작성한 표현 처리 과정을 보여드리겠습니다,
就这么简单,结果出来了,自我感觉挺欢喜的。
当然,这样设计的爬虫是有针对性的,定向爬取某一个站点的内容。也没有任何一个爬虫不会对收集到的链接进行筛选。通常可以使用BFS(宽度优先搜索算法)来爬取一个网站的所有页面链接。
完整的Python爬虫代码,爬取某湾最新的10页视频资源:
# coding: utf8 import urllib2 import re import pymongo db = pymongo.Connection().test url = 'http://某piratebay.se/browse/200/%d/3' find_re = re.compile(r'<tr>.+?\(.+?">(.+?)</a>.+?class="detLink".+?">(.+?)</a>.+?<a href="(magnet:.+?)" .+?已上传 <b>(.+?)</b>, 大小 (.+?),', re.DOTALL) # 定向爬去10页最新的视频资源 for i in range(0, 10): u = url % (i) # 下载数据 html = urllib2.urlopen(u).read() # 找到资源信息 for x in find_re.findall(html): values = dict( category = x[0], name = x[1], magnet = x[2], time = x[3], size = x[4] ) # 保存到数据库 db.priate.save(values) print 'Done!'
以上代码仅供思路展示,实际运行使用到mongodb数据库,同时可能因为无法访问某湾网站而无法得到正常结果。
所以说,电影来了网站用到的爬虫不难写,难的是获得数据后如何整理获取有用信息。例如,如何匹配一个影片信息跟一个资源,如何在影片信息库和视频链接之间建立关联,这些都需要不断尝试各种方法,最后选出比较靠谱的。
曾有某同学发邮件想花钱也要得到我的爬虫的源代码。
要是我真的给了,我的爬虫就几百来行代码,一张A4纸,他不会说,坑爹啊!!!……
都说现在是信息爆炸的时代,所以比的还是谁的数据挖掘能力强
好吧,那么问题来了学习挖掘机(数据)技术到底哪家强?
相关推荐:
위 내용은 비디오를 캡처하기 위해 Python으로 간단한 웹 크롤러를 작성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!