Python多线程爬虫初探—爬取豆瓣图书 top250

Python多线程爬虫初探—爬取豆瓣图书 top250

最近正在自学python爬虫方面的相关知识,学习到了如何使用python的urllib库进行网络爬虫,然后最近看到了多线程爬虫,于是自己也写了个小爬虫试了试多线程爬虫,把豆瓣图书top250爬了下来(这大概是新手入门最常爬的吧2333)

首先多线程简单理解就是在一个进程中同时执行多个任务,这样可以达到加快程序的运行速度的功能。

下面是代码部分:

首先是导入我们需要使用的几个模块

import re                 
import urllib.request     
import queue
import threading
import time

然后用模块queue的Queue方法定义一个队列(一种数据结构,遵循先进先出的原则)

htmls=queue.Queue()

之后定义线程1爬取网页的html源码并转化为以‘utf-8’编码格式的字符串

class crawhtml(threading.Thread):
    def __init__(self,htmls):           #重新定义Thread类的属性
        threading.Thread.__init__(self)
        self.htmls=htmls
    def run(self):                     #这里是线程的执行内容
        for i in range(10):
            url='https://book.douban.com/top250?start='+str(i*25) #这是网址的url
            html=urllib.request.urlopen(url).read().decode('utf-8')  #爬取网页内容并转码为utf-8(防止中文变成乱码)
            self.htmls.put(html)   #把获取到的内容加入到队列中
            self.htmls.task_done() #表示加入内容的完成

之后是线程2—使用正则表达式匹配出网页中我们需要的内容(图书的名字)并把它提取出来,写入文件中。

class selectword(threading.Thread):
    def __init__(self,htmls):
        threading.Thread.__init__(self)
        self.htmls=htmls
    def run(self):
        rank=1                #图书的排名
        for i in range(10):    
            htmltxt=self.htmls.get()    #总共要提取十个网页的内容
            htmltxt=htmltxt.replace('\n','').replace('\t','').replace(' ','')
            print(htmltxt)
            keyword='"title="(.+?)">'   #通过观察网页源码写出正则表达式
            word=re.compile(keyword).findall(htmltxt) #进行匹配
            fh=open(r'C:\Users\89520\Desktop\craw.txt','a') #加r是为了防止字符串中斜杠被当作转义符
            for i in range(25):         #将提取出来的内容写入到craw.txt文件中
                fh.write(str(rank)+'.'+word[i]+'\n')
                rank=rank+1     

最后是主函数

if __name__=='__main__':   
    craw=crawhtml(htmls)
    craw.start()
    select=selectword(htmls)
    select.start()

这样就完成了一个简单的多线程爬虫。

第一篇博客怎么会写,就这样吧,之后计划每周至少更一篇。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值