ホームページ >バックエンド開発 >Python チュートリアル >Baidu から継続的に検索する Python で実装された小型のクローラー
この記事ではBeautifulSoupライブラリを使用しています。タイトルのキーワードを抽出するだけなので、代わりにjeebaというライブラリも使用できます。中国語の単語の分割、もう 1 つのライブラリはchardet で、これは文字のエンコーディングを決定するために使用されます。もともとマルチスレッドを使用したいと思っていましたが、混乱していると思ったのでやめました。
DEEP = 1000
LOCK = threading.Lock()
PATH = "c:\test\"
urlQueue = Queue.Queue()
def pachong():
URL = 'http://www.baidu.com'
URL を返す
def getPageUrl(html):
urls = reUrl.findall(html)
URL 内の URL :
if len(url) > 10:
if url.find('javascript') == -1:
urlQueue.put(url)
def getContents(url):
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)
startUrl = pachong()
urlQueue.put(startUrl)
start()