Maison développement back-end Tutoriel Python Le robot d'exploration multithread Python explore les ressources du paradis du cinéma

Le robot d'exploration multithread Python explore les ressources du paradis du cinéma

Feb 24, 2017 pm 03:58 PM

最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载。刚开始学习python希望可以获得宝贵的意见。

  先来简单介绍一下,网络爬虫的基本实现原理吧。一个爬虫首先要给它一个起点,所以需要精心选取一些URL作为起点,然后我们的爬虫从这些起点出发,抓取并解析所抓取到的页面,将所需要的信息提取出来,同时获得的新的URL插入到队列中作为下一次爬取的起点。这样不断地循环,一直到获得你想得到的所有的信息爬虫的任务就算结束了。我们通过一张图片来看一下。

Le robot dexploration multithread Python explore les ressources du paradis du cinéma

  好的 下面进入正题,来讲解下程序的实现。

  首先要分析一下电影天堂网站的首页结构。

Le robot dexploration multithread Python explore les ressources du paradis du cinéma

  从上面的菜单栏中我们可以看到整个网站资源的总体分类情况。刚刚好我们可以利用到它的这个分类,将每一个分类地址作为爬虫的起点。

  ①解析首页地址 提取分类信息

#解析首页
def CrawIndexPage(starturl):
print "正在爬取首页"
page = __getpage(starturl)
if page=="error":
return
page = page.decode('gbk', 'ignore')
tree = etree.HTML(page)
Nodes = tree.xpath("//p[@id='menu']//a")
print "首页解析出地址",len(Nodes),"条"
for node in Nodes:
CrawledURLs = []
CrawledURLs.append(starturl)
url=node.xpath("@href")[0]
if re.match(r'/html/[A-Za-z0-9_/]+/index.html', url):
if __isexit(host + url,CrawledURLs):
pass
else:
try:
catalog = node.xpath("text()")[0].encode("utf-8")
newdir = "E:/电影资源/" + catalog
os.makedirs(newdir.decode("utf-8"))
print "创建分类目录成功------"+newdir
thread = myThread(host + url, newdir,CrawledURLs)
thread.start()
except:
pass
Copier après la connexion

在这个函数中,首先将网页的源码下载下来,通过XPath解析出其中的菜单分类信息。并创建相应的文件目录。有一个需要注意的地方就是编码问题,但是也是被这个编码纠缠了好久,通过查看网页的源代码,我们可以发现,网页的编码采用的是GB2312,这里通过XPath构造Tree对象是需要对文本信息进行解码操作,将gb2312变成Unicode编码,这样DOM树结构才是正确的,要不然在后面解析的时候就会出现问题。

  ②解析每个分类的主页

# 解析分类文件
def CrawListPage(indexurl,filedir,CrawledURLs):
print "正在解析分类主页资源"
print indexurl
page = __getpage(indexurl)
if page=="error":
return
CrawledURLs.append(indexurl)
page = page.decode('gbk', 'ignore')
tree = etree.HTML(page)
Nodes = tree.xpath("//p[@class='co_content8']//a")
for node in Nodes:
url=node.xpath("@href")[0]
if re.match(r'/', url):
# 非分页地址 可以从中解析出视频资源地址
if __isexit(host + url,CrawledURLs):
pass
else:
#文件命名是不能出现以下特殊符号
filename=node.xpath("text()")[0].encode("utf-8").replace("/"," ")\
.replace("\\"," ")\
.replace(":"," ")\
.replace("*"," ")\
.replace("?"," ")\
.replace("\""," ")\
.replace("<", " ") \
.replace(">", " ")\
.replace("|", " ")
CrawlSourcePage(host + url,filedir,filename,CrawledURLs)
pass
else:
# 分页地址 从中嵌套再次解析
print "分页地址 从中嵌套再次解析",url
index = indexurl.rfind("/")
baseurl = indexurl[0:index + 1]
pageurl = baseurl + url
if __isexit(pageurl,CrawledURLs):
pass
else:
print "分页地址 从中嵌套再次解析", pageurl
CrawListPage(pageurl,filedir,CrawledURLs)
pass
pass
Copier après la connexion

打开每一个分类的首页会发现都有一个相同的结构(点击打开示例)首先解析出包含资源URL的节点,然后将名称和URL提取出来。这一部分有两个需要注意的地方。一是因为最终想要把资源保存到一个txt文件中,但是在命名时不能出现一些特殊符号,所以需要处理掉。二是一定要对分页进行处理,网站中的数据都是通过分页这种形式展示的,所以如何识别并抓取分页也是很重要的。通过观察发现,分页的地址前面没有“/”,所以只需要通过正则表达式找出分页地址链接,然后嵌套调用即可解决分页问题。

③解析资源地址保存到文件中

#处理资源页面 爬取资源地址
def CrawlSourcePage(url,filedir,filename,CrawledURLs):
print url
page = __getpage(url)
if page=="error":
return
CrawledURLs.append(url)
page = page.decode(&#39;gbk&#39;, &#39;ignore&#39;)
tree = etree.HTML(page)
Nodes = tree.xpath("//p[@align=&#39;left&#39;]//table//a")
try:
source = filedir + "/" + filename + ".txt"
f = open(source.decode("utf-8"), &#39;w&#39;)
for node in Nodes:
sourceurl = node.xpath("text()")[0]
f.write(sourceurl.encode("utf-8")+"\n")
f.close()
except:
print "!!!!!!!!!!!!!!!!!"
Copier après la connexion

这段就比较简单了,将提取出来的内容写到一个文件中就行了

  为了能够提高程序的运行效率,使用了多线程进行抓取,在这里我是为每一个分类的主页都开辟了一个线程,这样极大地加快了爬虫的效率。想当初,只是用单线程去跑,结果等了一下午最后因为一个异常没处理到结果一下午都白跑了!!!!心累

class myThread (threading.Thread): #继承父类threading.Thread
def __init__(self, url, newdir,CrawledURLs):
threading.Thread.__init__(self)
self.url = url
self.newdir = newdir
self.CrawledURLs=CrawledURLs
def run(self): #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
CrawListPage(self.url, self.newdir,self.CrawledURLs)
Copier après la connexion

以上只是部分代码,全部代码可以到GitHub上面去下载(点我跳转)

最后爬取的结果如下。

Le robot dexploration multithread Python explore les ressources du paradis du cinéma

Le robot dexploration multithread Python explore les ressources du paradis du cinéma

Le robot dexploration multithread Python explore les ressources du paradis du cinéma

以上所述是小编给大家介绍的使用Le robot dexploration multithread Python explore les ressources du paradis du cinéma ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

更多Le robot dexploration multithread Python explore les ressources du paradis du cinéma相关文章请关注PHP中文网!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Apr 01, 2025 pm 11:15 PM

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Apr 02, 2025 am 07:18 AM

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Apr 02, 2025 am 07:15 AM

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Que sont les expressions régulières? Que sont les expressions régulières? Mar 20, 2025 pm 06:25 PM

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Apr 01, 2025 pm 10:51 PM

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Apr 01, 2025 pm 11:18 PM

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

Quelles sont les bibliothèques Python populaires et leurs utilisations? Quelles sont les bibliothèques Python populaires et leurs utilisations? Mar 21, 2025 pm 06:46 PM

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H

See all articles