ホームページ >バックエンド開発 >Python チュートリアル >Baidu から継続的に検索する Python で実装された小型のクローラー

Baidu から継続的に検索する Python で実装された小型のクローラー

WBOY
WBOYオリジナル
2016-06-16 08:46:33969ブラウズ

この記事ではBeautifulSoupライブラリを使用しています。タイトルのキーワードを抽出するだけなので、代わりにjeebaというライブラリも使用できます。中国語の単語の分割、もう 1 つのライブラリはchardet で、これは文字のエンコーディングを決定するために使用されます。もともとマルチスレッドを使用したいと思っていましたが、混乱していると思ったのでやめました。

コードをコピーします コードは次のとおりです:
#coding:utf-8
import re
import urllib
import urllib2
import sys
import time
import Queue
import thread
import threading
import jieba
import chardet
from BeautifulSoup import BeautifulSoup を BS としてインポート

DEEP = 1000
LOCK = threading.Lock()
PATH = "c:\test\"
urlQueue = Queue.Queue()
def pachong():
URL = 'http://www.baidu.com'
URL を返す
def getPageUrl(html):

reUrl = re.compile(r']*?[Hh][Rr][Ee][Ff] s*=s*["']?([^>"']+)["']?.*?>')

urls = reUrl.findall(html)
URL 内の URL :
if len(url) > 10:
if url.find('javascript') == -1:
urlQueue.put(url)

def getContents(url):

try:

url = urllib2.quote(url.split('#')[0].encode('utf-8'),safe = "%/: =&?~#+!$,;'@()*[]")
req = urllib2.urlopen(url)
res = req.read()
code = chartet.detect(res )['encoding']
#print
#print code
res = res.decode(str(code), 'ignore')
res = res.encode('gb2312', 'ignore ')
code = chartet.detect(res)['encoding']
#print code
#print res
return res
urllib2.HTTPError を除く、e:
print e .code
return None
urllib2.URLError、e:
print str(e)
return None

def writeToFile(html, url):
fp = file (PATH + str(time.time()) + '.html', 'w')
fp.write(html)
fp.close()


def getKeyWords( html):
コード =chardet.detect(html)['encoding']
コード == 'ISO-8859-2':
html.decode('gbk', 'ignore')。 encode('gb2312', 'ignore')
code = chardet.detect(html)['encoding']
スープ = BS(html, fromEncoding="gb2312")
titleTag =Soup.title
titleKeyWords = titleTag.contents[0]
CutWords(titleKeyWords)

def CutWords(contents):
print content
res = jieba.cut_for_search(contents)
res = 'n'.join(res)
print res
res = res.encode('gb2312')
keyWords = file(PATH + 'cutKeyWors.txt', 'a')
キーワード。 write(res)
keyWords.close()

def start():

while urlQueue.empty() == False:
url = urlQueue.get()
html = getContents(url)
getPageUrl(html)
getKeyWords(html)
#writeToFile(html, url)

if __name__ == '__main__':

startUrl = pachong()
urlQueue.put(startUrl)
start()


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。