多线程爬虫实例(不完善)

import threading

from queue import Queue

import time

from lxml import etree

import requests

import json

class CrawlThread(threading.Thread):

def __init__(self, name, page_queue, data_queue):

super().__init__()

self.name = name

# 保存页码队列

self.page_queue = page_queue

self.data_queue = data_queue

# url

self.url = 'http://www.fanjian.net/duanzi-{}'

self.headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',

}

def run(self):

# 这里面的思路是什么?

while 1:

if self.page_queue.empty():

break

# 1、从页码队列中获取页码

page = self.page_queue.get()

# 2、将url和页码进行拼接

url = self.url.format(page)

# 3、发送请求,获取响应

r = requests.get(url=url, headers=self.headers)

time.sleep(1)

# 4、将响应内容放入到数据队列中

self.data_queue.put(r.text)

class ParseThread(threading.Thread):

def __init__(self, name, data_queue, lock, fp):

super().__init__()

self.name = name

# 保存数据队列

self.data_queue = data_queue

self.lock = lock

self.fp = fp

def run(self):

# 解析线程解析步骤

while 1:

if self.data_queue.empty():

break

# 1、从数据队列中取出一个数据

content = self.data_queue.get()

# 2、解析这个数据

items = self.parse_content(content)

# 3、写入到文件中

string = json.dumps(items, ensure_ascii=False)

# 加锁

print(self.fp,'类似会发士大夫')

self.lock.acquire()

self.fp.write(string)

# 释放锁

self.lock.release()

# 解析数据函数

def parse_content(content):

# 生成tree对象

tree = etree.HTML(content)

# 先找到所有的li标签

li_list = tree.xpath('//li[@class="cont-item"]')

items = []

for oli in li_list:

# 获取头像

face = oli.xpath('.//div[@class="cont-list-reward"]//img/@data-src')[0]

# 获取名字

name = oli.xpath('.//div[@class="cont-list-head"]/a/text()')[0]

# 获取内容

text = oli.xpath('.//div[@class="cont-list-main"]/p/text()')[0]

# 获取时间

shijian = oli.xpath('.//div[@class="cont-list-info fc-gray"]/text()')[-1]

item = {

'头像': face,

'名字': name,

'内容': text,

'时间': shijian,

}

# 将字典添加到列表中

items.append(item)

return items

def create_queue():

page_queue = Queue()

data_queue = Queue()

# 向页码队列中添加页码

for page in range(1, 11):

page_queue.put(page)

return page_queue, data_queue

def main():

# 做什么?

# 创建锁

lock = threading.Lock()

# 打开文件

fp = open('duanzi.txt', 'w', encoding='utf8')

# 创建两个队列

page_queue, data_queue = create_queue()

# 创建采集、解析线程

crawlname_list = ['采集线程1', '采集线程2', '采集线程3']

parsename_list = ['解析线程1', '解析线程2', '解析线程3']

# 列表,用来保存所有的采集线程和解析线程

t_crawl_list = []

t_parse_list = []

for crawlname in crawlname_list:

t_crawl = CrawlThread(crawlname, page_queue, data_queue)

t_crawl.start()

# 将对应的采集线程保存起来

t_crawl_list.append(t_crawl)

for parsename in parsename_list:

t_parse = ParseThread(parsename, data_queue, lock, fp)

# 将对应的解析线程保存起来

t_parse_list.append(t_parse)

t_parse.start()

# 让主线程等待子线程结束之后再结束

for t_crawl in t_crawl_list:

t_crawl.join()

for t_parse in t_parse_list:

t_parse.join()

fp.close()

if __name__ == '__main__':

main()

为什么里面没有写数据呢?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,207评论 4 16
  • 接上文500 Lines or Less:A Web Crawler With asyncio Coroutine...
    彰乐乐乐乐阅读 1,615评论 0 2
  • 再次醒来之后,他看见他在空中飘着,前面有个小孩用绳子拉着他走,嘴里还在嘟囔着:“好累啊,人间的路怎么这么长,怎么还...
    广电1701b刘玉静阅读 228评论 1 1
  • 1 佩剑已妥,出门便是战场。 征夫换好戎装,拉开吱吱作响的门扉时,他清晰的看得家人眼里的错愕以及转瞬即逝的惊喜。取...
    z支枕听河流阅读 689评论 1 2
  • 看到这个命题我有点感兴趣了,很有挑战对于我来说,这是我最擅长却又是最不擅长的。 说到擅长,销售出身的我,对待陌...
    简iris阅读 299评论 0 1