Python实战计划 多进程抓取

单进程多线程: 一张桌子多个人吃饭,

from multiprocessing import pool

  1. 创建进程池

    1
    2
    pool = Pool( process = 60 )						  # 默认可能更好
    pool.map(get_all_links_from,channel_list.split()) # 依次对第二个参数指向第一个函数指针

  2. 用命令行运行程序

    • 一边运行count, 一边运行主程序

Aim

抓取过程中遇到网络问题,设计一个功能保证数据开始抓取的信息不回重复

Solution

这一章任务似乎与主题无关…….

放上标程先

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from multiprocessing import Pool
from page_parsing import get_item_info_from,url_list,item_info,get_links_from
from channel_extracing import channel_list

# ================================================= < <链接去重 > > =====================================================

# 设计思路:
# 1.分两个数据库,第一个用于只用于存放抓取下来的 url (ulr_list);第二个则储存 url 对应的物品详情信息(item_info)
# 2.在抓取过程中在第二个数据库中写入数据的同时,新增一个字段(key) 'index_url' 即该详情对应的链接
# 3.若抓取中断,在第二个存放详情页信息的数据库中的 url 字段应该是第一个数据库中 url 集合的子集
# 4.两个集合的 url 相减得出圣贤应该抓取的 url 还有哪些


db_urls = [item['url'] for item in url_list.find()] # 用列表解析式装入所有要爬取的链接
index_urls = [item['url'] for item in item_info.find()] # 所引出详情信息数据库中所有的现存的 url 字段
x = set(db_urls) # 转换成集合的数据结构
y = set(index_urls)
rest_of_urls = x-y # 相减

# ======================================================================================================================
文章目录
  1. 1. from multiprocessing import pool
  2. 2. Aim
  3. 3. Solution